c语言:关于scanf()语句与while循环的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言:关于scanf()语句与while循环的问题相关的知识,希望对你有一定的参考价值。
在你输入y回车后,键盘的缓冲区中会存在一个y和一个'\n'(回车符)。所以第第一次你的a会读入字符y,然而第二次输入y时,缓冲区中还有一个回车符在,所以第二次读入的是第一次残留在缓冲区的回车符,而不是新输入的y。所以不满足条件,退出循环。修改方法:
在scanf语句前加一句:fflush(stdin);这句的作用是清空缓冲区(就是所谓的流)中内容,这样你再次输入y的时候就不会读到上次剩余的回车符了。 参考技术A 三点:
1.
scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后abc还在缓冲区内。
2.
scanf不停止:如果缓冲区内有内容,scanf是不会停下来等你输入的,因为abc一直在缓冲区内,所以造成了一直不停重复循环。
3.
scanf的返回值:scanf如果成功返回的是输入的个数,当你输入abc的时候,scanf失败,返回0,则条件一直成立,所以造成了死循环
24)C语言之for循环与do{}while();循环
for循环
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //for 循环弥补while循环的缺陷 int main() { int i = 0; for (i = 1; i <= 10; i++)//i=1执行一次->判断部分->语句块->i++->i<=10-》语句块->i++->i<=10->语句块->...... { if (4 == i) continue;//跳过本次循环,跳到i++去 if (i == 7) break;//终止for循环 printf("%d ", i); } return 0; } /* for(表达式1;表达式2;表达式3) 循环语句; //表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断 //循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。 //表达式1,表达式2,表达式3都可以不写 */ //while循环的缺陷 /* int main() { int i=1;//初始化 ...... ...... while(i<=10)//缺点:初始化部分有时候离判断部分太远 { printf("%d",i); i++;//调整部分//缺点:调整部分离判断部分太远 } return 0; } */ |
do while循环
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //do while循环,至少循环一次 int main() { int i = 0; do //先执行语句再进行判断 { if (4 == i) { i++; continue;//结束本层循环跳到while(i<10)进行判断 } if (7 == i) { break;//结束do while循环 } printf("%d ", i); i++; } while (i < 10); return 0; } |
25)C语言之goto语句
以上是关于c语言:关于scanf()语句与while循环的问题的主要内容,如果未能解决你的问题,请参考以下文章