当前位置: 代码迷 >> C语言 >> [求助]怎样实现循环?
  详细解决方案

[求助]怎样实现循环?

热度:49   发布时间:2007-11-03 12:51:08.0
[求助]怎样实现循环?
想得到一个int 数字 如果输入的是int 以外的就提示重新输入
#include<stdio.h>
int
main(void)
{
int num;
int status;

printf("Enter an integer:\n");
status=scanf("%d",&num);
//当输入错误时要求重新输入
while(!status)
{
printf("please re-enter the number:\n");
scanf("%d",&num);
break;
}
printf("The entered number is:%d",num);
return 0;
}
运行时如果输入非数字就会陷入死循环
搜索更多相关的解决方案: int  num  status  数字  

----------------解决方案--------------------------------------------------------

没看懂LZ什么意思
不过我用VC编译输入其他不会死循环,会提示重新输入
但也输出乱码
不知道LZ用什么编译器


----------------解决方案--------------------------------------------------------
恩 是我说错了
下面这个就是会出现死循环
#include<stdio.h>
int
main(void)
{
int num;
int status;
//当输入错误时要求重新输入
do
{
printf("Enter an integer:\n");
status=scanf("%d",&num);
}
while(!status);
printf("The entered number is:%d",num);
return 0;
}


----------------解决方案--------------------------------------------------------
do while 语句啊.你输入的不是数字,它会一直执行printf("Enter an integer:\n");这句话
把它放到do while 循环上面就可以了

[此贴子已经被作者于2007-11-3 16:06:25编辑过]


----------------解决方案--------------------------------------------------------
我明白你的意思,可是我觉得你要实现这个程序好难喔~
说明一下你这个程序:
假设你输入一个int 整数,当执行while(!status)时,为逻辑假,然后 就会把这个结果输出 。
假设你输入一个非int 整数,当执行while(!status)时候时,它就出现了死循环,这个原因我不知道,也希望高手能指点。
----------------解决方案--------------------------------------------------------
while(scanf("%d", &num) != 0)
{
while(getchar() != '\n') /* 清空行缓冲 */
continue;
}


----------------解决方案--------------------------------------------------------
/* 这样就完美了 */

printf("Enter an integer:\n");
while(scanf("%d",&num) != 1)
{
printf("Please re-enter the number:\n");
while(getchar() != '\n')
continue;
}
----------------解决方案--------------------------------------------------------
/* 简要说明一下 */

输入: a
调用:scanf("%d", &num);
scanf() 返回 0,
但字母a 仍然在输入缓冲中,没有丢弃它,
(scanf() 等标准 IO 函数都是使用缓冲输入,行缓冲)

字母a 存放在缓冲区中,scanf() 读取了a 但scanf()不会丢弃它,
所以a 仍然在缓冲区中,下一次scanf() 函数仍然读取它,
如此就成了死循环。


/*
标准输入: stdin
标准输出: stdout
错误输出: stderr

学文件函数的时候因该会讲到这几个“文件”,
其实是一个结构的地址
FILE * fp = stdin;
对文件与对输入都使用数据流(也可说是缓冲区)
*/

----------------解决方案--------------------------------------------------------
回复:(cosdos)/* 这样就完美了 */ printf(

这是个方法,使用getchar()函数,然后判断这个从键盘输入的字符的ASCII值是不是数值,从而来进行循环。但这种想法对于两个以上的字符是不行的


----------------解决方案--------------------------------------------------------
楼上[!]

我把整行过滤了。

while(getchar() != '\n')
continue;




----------------解决方案--------------------------------------------------------
  相关解决方案