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

学了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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值