Loading...
  所在位置:论坛首页 -> 计算机科学与技术 -> 程序设计 -> [求助]scanf函数输入char字符的问题
回复

[求助]scanf函数输入char字符的问题

作者:yantianjia 时间:2010-11-24 22:41:47 收藏 编辑

在vs2008中写这样的一段代码:

 int a,b;
 char ch;
 printf("please input two numbers:\n");
 scanf("%d,%d",&a,&b);
 printf_s("please select a operation symbol form ('+','-','*','/')\n");
 scanf("%c",&ch);而运行时不能输入这个ch的char字符

 

这是为什么呢?

第2楼 ade
编辑 删除 引用

我们写一段程序测试一下scanf()函数.

for(int i=0;i<5;i++)
{
   printf("=======第%d次开始=======\n",i+1);
   scanf("%c",&ch);
   printf("值为%c\n=======第%d次结束=======\n",ch,i+1);
}

分别输入1,2后,输出结果如下:

=======第1次开始=======
1
值为1
=======第1次结束=======
=======第2次开始=======
值为

=======第2次结束=======
=======第3次开始=======
2
值为2
=======第3次结束=======
=======第4次开始=======
值为

=======第4次结束=======
=======第5次开始=======

你会发现什么现象?第2次,第4次没有让你输入直接输出了,并且值为一个回车.这是为什么呢?

因为scanf只是读入一个字符,而你在输入时实际上输入的是:字符+回车(Enter),Enter产生的"\n"也在输入缓冲区中,下次调用 scanf时就会直接读到 它而不是等待你再次输入!getchar()有类似的结果。所以我们不提倡使用 scanf("%c", ...),特别是不提倡把它用在循环中。

解决的方法有三:
(1)将 scanf("%c", &ch); 修改为:
scanf(" %c", &ch); /*在%前加上一个空格*/
(2)、将 scanf("%c", &ch); 修改为:
scanf("%c%*c", &ch);
(3)、使用函数fflush,清除流:就是在每个接收字符的scanf语句前面,加上fflush(stdin);

回复时间:2010-11-25 10:58:37
第3楼 yantianjia
编辑 删除 引用

太感谢了,不过scanf("%c%*c", &ch);中
%*c是什么意思呢?

回复时间:2010-11-25 21:37:57
第4楼 ade
编辑 删除 引用

%*c是跳过一个输入字符的意思.这个是scanf的一个语法.就是在%和格式字符之间加一个*号就可以跳过这个输入数字.比如当执行语句:scanf("%d,%*d,%d",&x,&y);时,我输入12,39,12三个数后,x的值为12,y值为12,39被跳过了.

回复时间:2010-11-26 9:41:08
高级回复

操作选项: 评分 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
  首页
Copyright 2006-2012 HistoryCreator.com Powered By: BBSGood 5
吉ICP备06005902号