首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个小小的BUG解决思路

2012-03-20 
一个小小的BUGC/C++ code#includestdio.h#includestdlib.hvoid main(){FILE *fpcharch, name[20]int

一个小小的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

热点排行