C语言 scanf在while循环里的无限循环
2017-05-01 15:59
1456 查看
首先看一段代码
为什么会这样呢?
scanf("%d",input);这句语句从缓冲区接受数字,而当我们输入字母或其他时,字符就一直留在缓冲区,循环第二次时,scanf再次从缓冲区获取时,还是不是数字,就相当跳过了scanf这一句......从而,造成死循环。
如何解决呢?
1.在scanf这一句后面加一句getchar(); 用于接受字符;
2.在scanf这一句前面加fflush(stdin); 这一函数用于清空缓冲区,但他并不适用于所有编译器,遇到vs2015,gcc编译器时,它就失效了
#include <stdio.h> int main() { int i = 0; int input = 0; while (1) { printf("input a number:"); scanf("%d", &input); if (input > 0) { printf("这是正数\n"); } else if (input < 0) { printf("这是负数\n"); break; } } return 0; }可以看出来它的意思是当输入一个正数时,会继续输入,直到输入一个负数时才停止。但是,粗心的我有一次把一个字母输入进去了,结果
为什么会这样呢?
scanf("%d",input);这句语句从缓冲区接受数字,而当我们输入字母或其他时,字符就一直留在缓冲区,循环第二次时,scanf再次从缓冲区获取时,还是不是数字,就相当跳过了scanf这一句......从而,造成死循环。
如何解决呢?
1.在scanf这一句后面加一句getchar(); 用于接受字符;
2.在scanf这一句前面加fflush(stdin); 这一函数用于清空缓冲区,但他并不适用于所有编译器,遇到vs2015,gcc编译器时,它就失效了
相关文章推荐
- c语言中while((c=getchar())!=EOF)怎样才能输入EOF是循环中断
- C语言 while循环 十进制转二进制,低位到高位排列
- 黑马程序员------C语言-----流程控制(循环结构:while,for)
- c语言:分别使用for循环和while循环求5!
- C语言-循环中套用scanf()出现的问题
- 【C语言简单说】十六:do...while循环
- C语言-while循环
- <C语言>输入一个数求其阶乘(while循环和for循环)
- C语言学习10(循环结构:do-while语句)
- 无限循环 while(1) 和 for(; ;) 有何区别?哪个更好?
- C语言技巧【枚举作为函数变量类型】【数据输入与输出】【do while循环体内scanf函数被跳过,循环结束】【用const修饰函数的参数】
- c语言:分别使用for循环和while循环求5!
- C语言之while循环语句和do while循环语句、for循环语句、循环嵌套
- while循环输入字符串中以Esc键作为循环结束标识——scanf读取带空格字符串
- C语言for循环、while循环(含math.h)
- 无限循环 while(1) 和 for(; ;) 有何区别?哪个更好?
- 基于proteus的51单片机仿真实例三十一、C语言的while循环语句
- 关于while循环中的~scanf()
- 在while循环里switch菜单和scanf输入的问题
- c语言中的一些问题(scanf循环、三维数组做形参)