一个小小的BUG
- C/C++ code
#include<stdio.h>#include<stdlib.h>void main(){ FILE *fp; char ch, name[20]; int num; float score; if((fp=fopen("c:\\text.txt","w+"))==NULL) { printf("cannot open file\n"); getchar(); exit(1); } printf("请输入学生的信息,用tab键分隔,输入num为0结束:\n"); printf("学号\t姓名\t成绩\n"); scanf("%d%s%f",&num,&name,&score); while(num!=0) { fprintf(fp,"%d %s %f\n",num,name,score); [color=#FF0000]scanf("%d%s%f\n",&num,name,&score);[/color] } printf("文件的内容是:\n"); rewind(fp); while((ch=fgetc(fp))!=EOF) { putchar(ch); } printf("\n"); fclose(fp);}如图表示,本来我这个输入 0 0 0就结束,然后显示文本就可以。
但是我必须输入2次才可以入:0 0 0
0 0 0.才可以结束输入。
我F10单步的时候,就是跑到scanf("%d%s%f\n",&num,name,&score);需要输入2遍0 0 0才退出执行,搞不明白。
我在TC软件下也测试了 不行。
[解决办法]
在scanf前面加一句rewind(stdin);
[解决办法]
把循环里面的那个scanf中的\n去掉
[解决办法]
循环前面那个也错了, name 不要取地址.
[解决办法]
while里面的scanf("%d%s%f\n",&num,name,&score);
去掉\n
[解决办法]
\n 换行后 字符会遗留在缓冲区 scanf会直接得到这个遗留字符
[解决办法]
(4)控制串中的空白符使 scanf() 在输入流中跳过一个或多个空白行。空白符可以是空格(space)、制表符(tab)和新行符(newline)。 本质上,控制串中的空白符使 scanf() 在输入流中读,但不保存结果,直到发现非空白字符为止。
--摘自 http://baike.baidu.com/view/1390039.htm