一个小小的BUG

EmbeddedLong 2012-02-15 02:18:06

#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);
scanf("%d%s%f\n",&num,name,&score);
}
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软件下也测试了 不行。
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2012-02-15
  • 打赏
  • 举报
回复
(4)控制串中的空白符使 scanf() 在输入流中跳过一个或多个空白行。空白符可以是空格(space)、制表符(tab)和新行符(newline)。 本质上,控制串中的空白符使 scanf() 在输入流中读,但不保存结果,直到发现非空白字符为止。

--摘自 http://baike.baidu.com/view/1390039.htm
IVERS0N 2012-02-15
  • 打赏
  • 举报
回复
\n 换行后 字符会遗留在缓冲区 scanf会直接得到这个遗留字符
EmbeddedLong 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justkk 的回复:]
把循环里面的那个scanf中的\n去掉
[/Quote]

能说说原因吗?
永远的明日 2012-02-15
  • 打赏
  • 举报
回复
while里面的scanf("%d%s%f\n",&num,name,&score);
去掉\n
www_adintr_com 2012-02-15
  • 打赏
  • 举报
回复
循环前面那个也错了, name 不要取地址.
justkk 2012-02-15
  • 打赏
  • 举报
回复
把循环里面的那个scanf中的\n去掉
赵4老师 2012-02-15
  • 打赏
  • 举报
回复
在scanf前面加一句rewind(stdin);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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