当前位置: 代码迷 >> C语言 >> [求助]一个奇怪的问题
  详细解决方案

[求助]一个奇怪的问题

热度:109   发布时间:2007-08-30 13:06:57.0
[求助]一个奇怪的问题
我在做一个练习题的时候碰到的:
#include <stdio.h>
main()
{
int i;
int a[10];
int t;
for (i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&t);
a[i]=t;
}
printf("这个数组各元素的值是:%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
printf(" %d %d %d %d %d\n",a[5],a[6],a[7],a[8],a[9]);
}
问题是:比如我输到第5个数的时候不小心输入了“3c”,就是数字后面还有1个字母,回车想继续输的时候,程序就会直接运行完,且输出的其余的数字都是“3”。这是什么原因呢?
新手,还请各位大大不吝赐教~
搜索更多相关的解决方案: 练习题  

----------------解决方案--------------------------------------------------------
一点也不奇怪,那个c不能用%d来读,scanf失败,但t不改变,并且那个c一直留在那里
除非你用%s或者%c把它读走



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
----------------解决方案--------------------------------------------------------
我的解释是:当输入3c时,输入非法结束,使得t的值一直是3,之后全部赋值给a[5]---a[9].
如果你没有使用中间变量t的话,那全部是随机值.
----------------解决方案--------------------------------------------------------
#include <stdio.h>
main()
{
int i;
int a[10];
int t;
for (i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&t);
fflush(stdin);
a[i]=t;
}
printf("这个数组各元素的值是:%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4]);
printf(" %d %d %d %d %d\n",a[5],a[6],a[7],a[8],a[9]);
getch();
}

清除缓冲区函数fflush()
----------------解决方案--------------------------------------------------------

虽然现在看不懂,但总会懂的


----------------解决方案--------------------------------------------------------
严重反对使用 fflush(stdin);



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
----------------解决方案--------------------------------------------------------
回复:(雨中飞燕)严重反对使用 fflush(stdin);[img]...
为什么不能用呢?感觉在这里挺好用的,一般不用.
----------------解决方案--------------------------------------------------------

谢谢各位的指点~


----------------解决方案--------------------------------------------------------
scanf("%d",&t);

while(scanf("%d",&t)==0)getchar();



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

请大家不要用TC来学习C语言
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
----------------解决方案--------------------------------------------------------
所谓scanf函数的返回值就是输入参数的个数(正确状况下)否则返回EOF(-1).
我喜欢这样写while((EOF!=scanf(" ", )) && )
----------------解决方案--------------------------------------------------------
  相关解决方案