C语言写文件问题,一个你想也想不到的问题。
2016-07-18 10:35
225 查看
学了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();
收藏于 2009-05-14
#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();
收藏于 2009-05-14
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- Linux 自检和 SystemTap
- 如何写好 C main 函数
- Python 七步捉虫法
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- 路由器的配置与调试
- 对于技术人员的出现了运行时间错误,是否要进行调试的解决方法
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua实现split函数