| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1141 人关注过本帖
标题:[求助]怎样实现循环?
只看楼主 加入收藏
sunpy
Rank: 1
来 自:厦门
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-10-1
结帖率:100%
收藏
 问题点数:0 回复次数:13 
[求助]怎样实现循环?
想得到一个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 数字 
2007-11-03 12:51
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 

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


女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-03 14:16
sunpy
Rank: 1
来 自:厦门
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-10-1
收藏
得分:0 
恩 是我说错了
下面这个就是会出现死循环
#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;
}


荀子《劝学》:“不积跬步,无以至千里;不积小流,无以成江海.”
2007-11-03 15:03
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
do while 语句啊.你输入的不是数字,它会一直执行printf("Enter an integer:\n");这句话
把它放到do while 循环上面就可以了

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


女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-03 16:04
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
我明白你的意思,可是我觉得你要实现这个程序好难喔~
说明一下你这个程序:
假设你输入一个int 整数,当执行while(!status)时,为逻辑假,然后 就会把这个结果输出 。
假设你输入一个非int 整数,当执行while(!status)时候时,它就出现了死循环,这个原因我不知道,也希望高手能指点。

~~我的明天我知道~~
2007-11-03 16:06
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
while(scanf("%d", &num) != 0)
{
while(getchar() != '\n') /* 清空行缓冲 */
continue;
}


—>〉Sun〈<—
2007-11-03 21:28
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/* 这样就完美了 */

printf("Enter an integer:\n");
while(scanf("%d",&num) != 1)
{
printf("Please re-enter the number:\n");
while(getchar() != '\n')
continue;
}

—>〉Sun〈<—
2007-11-03 21:31
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
/* 简要说明一下 */

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

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


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

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

—>〉Sun〈<—
2007-11-03 21:49
linsd2001
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-11
收藏
得分:0 
回复:(cosdos)/* 这样就完美了 */ printf(

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

2007-11-03 21:57
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
楼上[!]

我把整行过滤了。

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




—>〉Sun〈<—
2007-11-03 22:07
快速回复:[求助]怎样实现循环?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012612 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved