C语言写文件问题,一个你想也想不到的问题。

来源:互联网 发布:各种编程语言的区别 编辑:程序博客网 时间:2024/06/04 23:18

学了C语挺言久了,一直都对自己的调试能力很自信的。真没想到会被这个问题困扰这么久。好在最后还是调试出来了。大家试一下下边的代码,就知道怎么回事了。

#include<stdio.h>

int main()

{

scanf("%c,%c,%c",&a,&b,&c);
printf("\nyou enter:%c,%c,%c\n",a,b,c);
scanf("%c,%c,%c",&a,&b,&c);
printf("\nyou enter:%c,%c,%c\n",a,b,c);
scanf("%c,%c,%c",&a,&b,&c);
printf("\nyou enter:%c,%c,%c\n",a,b,c);

return 0;

}

#include<stdio.h>

int main()

{

scanf("%c,%c,%c",&a,&b,&c);

getchar();

printf("\nyou enter:%c,%c,%c\n",a,b,c);


scanf("%c,%c,%c",&a,&b,&c);

getchar();

printf("\nyou enter:%c,%c,%c\n",a,b,c);


scanf("%c,%c,%c",&a,&b,&c);

getchar();


printf("\nyou enter:%c,%c,%c\n",a,b,c);

return 0;

}

#include<stdio.h>

int main()

{

scanf("%c,%c,%c\n",&a,&b,&c);
printf("\nyou enter:%c,%c,%c\n",a,b,c);
scanf("%c,%c,%c\n",&a,&b,&c);
printf("\nyou enter:%c,%c,%c\n",a,b,c);
scanf("%c,%c,%c\n",&a,&b,&c);
printf("\nyou enter:%c,%c,%c\n",a,b,c);

return 0;

}

#include<stdio.h>

int main()

{

scanf("%c,%c,%c",&a,&b,&c);
fflush(stdin);
printf("\nyou enter:%c,%c,%c\n",a,b,c);
scanf("%c,%c,%c",&a,&b,&c);
fflush(stdin);
printf("\nyou enter:%c,%c,%c\n",a,b,c);
scanf("%c,%c,%c",&a,&b,&c);
fflush(stdin);
printf("\nyou enter:%c,%c,%c\n",a,b,c);

return 0;

}

大家发现什么了吗?对,就是键盘的输入缓冲区,当你按下回车键时,它其实被存储在缓冲区,当你下一次使用scanf时,就会发现输入的值错了,如你是讲scanf与fputc合用,那问题可是相当严重,你发现同一份数据被写入文件两次。郁闷吧?以后记得每次输入都要刷新键盘输入缓冲区,否则有你苦的。。。。。。

哎。。。。。。时间啊。。。。。。又是这些层次问题。。。。。。当你没有进入到那个层次,你就不知道它里面的底部细节,然后就只能很郁闷地在外面不停测试、测试。细节、底层、封装、屏蔽、透明……

学汇编是好的。。。。。。学操作系统是好的。。。。。。学编译原理是好的。。。。。。

PS:这里可以用fflush(stdin),也可以使用flushall();

0 0