解决scanf接收多余回车字符问题--清空缓冲区
2012-09-29 12:24
330 查看
以下代码有一定问题:
第一次输入y,然后回车确定后,
开始下一次循环,但是这个回车符也会被认为是一个字符,
所以循环一次后会自动给ch赋值一个回车符,而不会要你输入字符,
ch == y 就成了假了,循环自动退出程序结束
所以该程序只跑了第一次后面就会自动结束。
#include <stdio.h>
void main(void)
{
char ch;
do{
printf("测试/n");
printf("继续测试?(y/n):");
scanf("%c",&ch);
}while(ch=='y');
system("pause"); }
所以我们应该修改下:
方法一:在scanf后面加入一条语句getchar();让getchar去接收回车符
方法二:加入在scanf语句后面加一条语句fflush(stdin);该局意思是清空缓冲区,也就是清楚了缓冲区的回车符,循环后就不会自动输入回车符给ch了,而会要求你输入字符.
修改后的代码如下:
#include <stdio.h>
void main(void)
{
char ch;
do{
printf("测试/n");
printf("继续测试?(y/n):");
scanf("%c",&ch);
fflush(stdin);//清空缓冲区
//或者 getchar();
}while(ch=='y');
system("pause");
}
第一次输入y,然后回车确定后,
开始下一次循环,但是这个回车符也会被认为是一个字符,
所以循环一次后会自动给ch赋值一个回车符,而不会要你输入字符,
ch == y 就成了假了,循环自动退出程序结束
所以该程序只跑了第一次后面就会自动结束。
#include <stdio.h>
void main(void)
{
char ch;
do{
printf("测试/n");
printf("继续测试?(y/n):");
scanf("%c",&ch);
}while(ch=='y');
system("pause"); }
所以我们应该修改下:
方法一:在scanf后面加入一条语句getchar();让getchar去接收回车符
方法二:加入在scanf语句后面加一条语句fflush(stdin);该局意思是清空缓冲区,也就是清楚了缓冲区的回车符,循环后就不会自动输入回车符给ch了,而会要求你输入字符.
修改后的代码如下:
#include <stdio.h>
void main(void)
{
char ch;
do{
printf("测试/n");
printf("继续测试?(y/n):");
scanf("%c",&ch);
fflush(stdin);//清空缓冲区
//或者 getchar();
}while(ch=='y');
system("pause");
}
相关文章推荐
- 使用scanf读入,误读回车,造成流内无效字符占位解决/C
- 关于scanf 保留回车在缓冲区的解决办法
- c语言scanf()停止接受输入及scanf("%c",&c)吃掉回车或者空格字符的问题
- 关于C语言使用输入函数后键盘缓冲区还有多余字符没的问题
- gcc c语言中scanf输入格式不正确,清空缓冲区问题
- 一个字符变量存储到动态分配内存引发的输入问题解决--连续输入scanf函数存在缓冲区的问题
- 【bug笔记】scanf不停下来接收输入陷入死循环 fflush(stdin)与其他读取缓冲区字符的方法
- 静态页面如何接收参数以及解决特殊字符的编码问题
- SSH框架中Controller接收web前端得中文字符乱码问题解决
- 避免scanf函数输入单个字符时与回车冲突的问题
- c语言中scanf("%c",&c)吃掉回车或者空格字符的问题
- Filter解决servlet接收前台传的中文字符乱码问题
- Android服务器端接收中文字符出现“?”问题解决办法
- .NET:关于byte数组在用StreamWriter文件写出后出现多余字符的解决方法及VS方案文件图标显示问题
- 解决系统下以管理员身份运行的程序接收不到拖放文件消息[WM_DROPFILES]问题的方法
- C++重载输入和输出操作符以及IO标准库中的刷新输入缓冲区残留字符问题
- jQuery ajax return语句返回值无法接收问题解决方案
- linux 下,解决tomcat服务器接收中文乱码的问题
- 程序包org.junit不存在和编码GBK的不可映射字符问题解决