首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于这个 while 死循环的有关问题

2012-08-28 
关于这个 while 死循环的问题#include stdio.h#include string.hint main(void){int aawhile((scanf(

关于这个 while 死循环的问题
#include <stdio.h>
#include <string.h>
int main(void)
{
int aa;  
while((scanf("%d",&aa))!=1)
{
puts("请重新输入!"); //为什么只执行这句?  
if(scanf("%d",&aa)==1) //请问为什么这句不执行?
break;
}
return 0;
}

假设我输入1个: a[Enter]
为什么只执行:puts("请重新输入!"); ?

这个程序目的是为了校验 输入赋值变量aa,直到成功为其赋值为一个int值时。


[解决办法]
while((scanf("%d",&aa))!=1)

if(scanf("%d",&aa)==1) //请问为什么这句不执行?

你不觉得这两句本身就是一样的吗? 输入不合法进入循环, 然后不进入If。

正确做法是!=1,然后while(fgetc != EOF and '\n' );吃掉所有换行符前的垃圾字符.


[解决办法]
%d 跳过空白字符,那'a'总不是空白字符吧,'a'不会跳过,所以if()中的scanf也读了一次,读完之后发现没读到,于是继续循环
if(scanf("%d",&aa)==1) //请问为什么这句不执行?
只要你在这一句之前先清空缓存区,一定可以解决你的问题,睡觉了。
[解决办法]
你是这个意思吧,加个flushall(),清空非法输入的字符就行了。

C/C++ code
#include <stdio.h>#include <string.h>int main(void){    int aa;   while(true){    if(scanf("%d",&aa)==1)    {                break;    }    else    {        puts("请重新输入!");        flushall();//清空输入流,这个是关键    }}    return 0;} 

热点排行