[求助]关于C语言的while循环
大家看下面两个循环
(1)while(scanf("%d",&hr)!=1)
{
while((ch=getchar())!='\n')putchar(ch);
printf(" is not a valid value.");
}
(2)while(scanf("%d",&hr)!=1)
{
printf(" is not a valid value.");
}
这两个循环的作用是如果输入的不是整数,那么给出提示并要求重新输入,只是第一个循环多了回显用户错误的输入。
我想在某些场合不需要回显错误,所以删除了while((ch=getchar())!='\n')putchar(ch);语句。
但是在调试运行中发现,第二个循环是个死循环。
为什么第一个循环行,第二个不行?回显语句对循环有什么影响?
----------------解决方案--------------------------------------------------------
while((ch=getchar())!='\n')的作用主要是清空输入缓冲区,因为用户输入时在缓冲区留下了一个回车'\n',如果不清除掉scanf("%d",&hr)永远跳不过这个回车。你不需要回显错误改成这样就行了:
while(scanf("%d",&hr)!=1)
{
while((ch=getchar())!='\n');
printf(" is not a valid value.");
}
----------------解决方案--------------------------------------------------------
仅在while语句后以单独的分号形成了空语句
----------------解决方案--------------------------------------------------------
看懂了在说话
----------------解决方案--------------------------------------------------------
谢谢各位,其实这是信息残余问题。
----------------解决方案--------------------------------------------------------
同意2楼
----------------解决方案--------------------------------------------------------
第二题只要输入是不为1,其他的输出都是可以的是个死循环
第一个只要输入不为1,而且是字符直到遇到空格是才输出的,所以不是死循环
----------------解决方案--------------------------------------------------------
2楼好样的
----------------解决方案--------------------------------------------------------
百年对c确实比一般人要理解深刻
当然包括偶
----------------解决方案--------------------------------------------------------