初学C,望C朋友指点。

dreamc2010 2010-06-03 05:18:53
#include<stdio.h>
int main(void)
{
char c;
int ch;
scanf("%c",&c);
printf("1.%c\n",c);
while(scanf(" %d",&ch)!=1)
{
printf("Please again!");
}
printf("2.%d\n",ch);
getchar();
return 0;
}

此程序,本人意思是:键入数字即可显示数字。一旦键入其他字符,就显示一片Please again!。为什么输入非数字就无限显示:Please again!
...全文
58 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
匚匚 2010-06-03
  • 打赏
  • 举报
回复
你个S B老子以后不回复你的帖子了
猪!
匚匚 2010-06-03
  • 打赏
  • 举报
回复
楼上有理
huanmie_09 2010-06-03
  • 打赏
  • 举报
回复
2楼正确,3楼解释有点问题。
这里:
因为你输入时最后按了一个回车,这个回车还保留在缓冲区中,下次循环时,自动在里面寻找,若没有才等待输入...
当输入为非数字字符时,如a,
scanf(" %d",&ch)匹配字符'a'失败,scanf函数结束,将不能匹配的字符放回到键盘缓冲区,
这样如果不清空键盘缓冲区的话,下一次循环读取的时候,scanf还是匹配键盘缓冲区里德'a'字符.
再次失败,这样就陷入了死循环.
匚匚 2010-06-03
  • 打赏
  • 举报
回复

rewind(stdin); //就是为了将缓冲区的内容清除,便于下次正确输入
匚匚 2010-06-03
  • 打赏
  • 举报
回复
2楼就能解决问题,至于是什么原因:

因为你输入时最后按了一个回车,这个回车还保留在缓冲区中,下次循环时,自动在里面寻找,若没有才等待输入...


建议你养成结贴的习惯!
匚匚 2010-06-03
  • 打赏
  • 举报
回复
while(scanf(" %d",&ch)!=1)
{
printf("Please again!");
rewind(stdin); //加一句
}
  • 打赏
  • 举报
回复
int scanf();
scanf的返回值
  scanf的返回值有后面的参数决定   scanf("%d%d", &a, &b);   如果a和b都被成功读入,那么scanf的返回值就是2   如果只有a被成功读入,返回值为1   如果a和b都未被成功读入,返回值为0   如果遇到错误或遇到end of file,返回值为EOF。   且返回值为int型.





69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧