考考大家的C语言基础

hearlihong 2004-09-08 05:43:55
#include <stdafx.h>
#include <stdio.h>
int main()

{
int i=0;
while ( i != 1)
{
printf("Input a number, 1 - End, Other Number -Continue:");
scanf("%d",&i);
}
printf("Finished.\n");
return 0;
}
如果输入a你会发现一个意想不到的结果。
其中的道理如何解释。
...全文
540 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxj51983 2004-09-09
  • 打赏
  • 举报
回复
to chengmuqingqing
scanf ()函数不具备类型检查的功能!不像cin<<和cout>>
短歌如风 2004-09-09
  • 打赏
  • 举报
回复
其实报错了:scanf ()的返回值表明了实际输入了几个值。而当输入缓冲内容不足时它会等待输入而不会返回,所以返回值与要求输入的值的个数不符时必然是出错了。
hearlihong 2004-09-09
  • 打赏
  • 举报
回复
还是星星厉害,给分,结帖。
kobefly 2004-09-09
  • 打赏
  • 举报
回复
恩,关于缓冲区的问题,我也有所研究,其实我也觉得用fflush(stdin)要好一点啊,毕竟你不知道用户会输入什么,有些时候觉得写程序要考虑到那么多的非法输入真的很难,新手,希望大家多指教啊!
twopiece12 2004-09-08
  • 打赏
  • 举报
回复
有意思!
诚木青清 2004-09-08
  • 打赏
  • 举报
回复
数据类型 不对,难道不报错? 难道是编译漏洞???
高手请指点!
学习……
sugelade 2004-09-08
  • 打赏
  • 举报
回复
学习!
knocker_k 2004-09-08
  • 打赏
  • 举报
回复

#include <stdio.h>
int main()

{
int i=0;
while ( i != 1)
{
printf("Input a number, 1 - End, Other Number -Continue:");
scanf("%d",&i);
fflush(stdin);//清一下stdin
printf("\n%d\n",i);
}
printf("Finished.\n");
return 0;
}
jzg1234 2004-09-08
  • 打赏
  • 举报
回复
好象getchar()要家头文件的啊
jzg1234 2004-09-08
  • 打赏
  • 举报
回复
应该是清空啊!!!
好久没写过C了啊
不好意思
jzg1234 2004-09-08
  • 打赏
  • 举报
回复

while ( i != 1)
{
printf("Input a number, 1 - End, Other Number -Continue:");
scanf("%d",&i);

/*在次加 一句,去掉键盘缓冲区啊*/
getch();
}
doublesong 2004-09-08
  • 打赏
  • 举报
回复
agreement
plainsong(短歌)
dfwzy 2004-09-08
  • 打赏
  • 举报
回复
看楼主的好象是死循环,不明白会有什么结果
zgy166 2004-09-08
  • 打赏
  • 举报
回复



输入缓冲区一旦有输入,默认就是0,但又因为输入“非法”,所以输入缓冲不会清空,
所以“while ( i != 1)”始终满足,故为死循环。
Sanco 2004-09-08
  • 打赏
  • 举报
回复
哦,原来主要是缓存区的问题啊。谢你,plainsong(短歌) 。有时间去我的贴子看看。
短歌如风 2004-09-08
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()

{
int i=0;
int temp;
while ( i != 1)
{
printf("Input a number, 1 - End, Other Number -Continue:");
if(scanf("%d",&i) < 1)
do{
temp = getchar();
}
while ( temp != '\n' && temp != EOF);
}
printf("Finished.\n");
return 0;
}
xjp6688 2004-09-08
  • 打赏
  • 举报
回复
学习
zhuzebin 2004-09-08
  • 打赏
  • 举报
回复
不明白
短歌如风 2004-09-08
  • 打赏
  • 举报
回复
当C流文件格式输入遇到非法输入时不会自动把错误的输入从输入缓冲中删除,你必需自己删除。由于代码中没有对错误进行检查,当遇到非法输入'a'时,i的值不变,下一个输入的字符还是'a',导致下一次迭代还是非法输入,必然会陷入死循环。C++中也是这样的。这个问题已经问过多次了,无论是在C中还是在C++中。应该说,代码中没有考虑到非法输入的情况,至少是个缺陷。
hearlihong 2004-09-08
  • 打赏
  • 举报
回复
to:pacman2000(pacman)(影子传说)
如果说没有读到数字默认为零,为什么下一个循环的时候没有等待录入呢?


加载更多回复(13)

69,382

社区成员

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

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