为什么会停止输入?for(n=0; cin>>num[n]; n++);
#include <stdlib.h>
#include <iostream.h>
int compare(const void *arg1,const void *arg2);
void main(void)
{
const int max_size=10; // 数组允许元素的最大个数
int num[max_size]; // 整型数组
// 从标准输入设备读入整数,同时累计输入个数
// 直到输入的是非整型数据为止
int n;
for(n=0; cin>>num[n]; n++);
// C标准库中的快速排序(quick-sort)函数
qsort(num,n,sizeof(int),compare);
// 将排序结果输出到标准输出设备
for (int i=0;i<n;i++)
cout<<num[i]<<"\n";
}
// 比较两个数的大小
// 如果*(int *)arg1比*(int *)agr2小,则返回-1
// 如果*(int *)arg1比*(int *)agr2大,则返回1
// 如果*(int *)arg1等于*(int *)agr2,则返回0
int compare(const void *arg1,const void *arg2)
{
return (*(int *)arg1 <*(int *)arg2)?-1:(*(int *)arg1>*(int *)arg2?1:0);
}
各位老大帮我解释一下,为什么执行到for(n=0; cin>>num[n]; n++);时,输入的是非整数,就会停止输入?
问题点数:10、回复次数:10Top
1 楼GZCompiler(编译器)回复于 2003-08-04 20:14:00 得分 0
循环怎么没有结束条件?
改:
for(n=0;n<max_size;cin>>num[n],n++);Top
2 楼matq2008(叶子.net)回复于 2003-08-04 20:21:35 得分 0
死循环了Top
3 楼saeba(浮躁是失败的最初原因)回复于 2003-08-04 20:45:16 得分 0
for(n=0; cin>>num[n]; n++);
可能是这样,当n为非整数时,num[n]不成立,因此跳出循环
不过没上机调试,不知道是不是这样Top
4 楼jargon(悠来悠去的鱼)回复于 2003-08-04 21:01:44 得分 0
楼上说的好像有些道理,我也是这样想的,,再上面的两个说的不对,你们可以调试一下,不是死循环的Top
5 楼jargon(悠来悠去的鱼)回复于 2003-08-04 21:04:53 得分 0
我上面说错了,n是用来记录输入次数的,而不是将输入值赋给n的,所以楼上的说的好像也不对Top
6 楼StdAfx(任杰)回复于 2003-08-04 21:38:25 得分 0
你这个问题比较复杂,你必须想办法保证是正确的类型才能处理,否者会出错,而且不好解决。你可以看下面的帖子,也是类似的错误引起的。
http://expert.csdn.net/Expert/topic/1430/1430514.xml?temp=.5895349
我到目前也没有想出什么好的方法来解决这类问题。Top
7 楼StdAfx(任杰)回复于 2003-08-04 21:41:00 得分 5
但你这个问题,我觉得还是很容易接受的。既然类型不符,那就应该退出,不然你觉得怎样才是合理的呢?但产生这个问题的本质原因和怎么解决确实是值得研究的。Top
8 楼ForFar()回复于 2003-08-04 22:24:57 得分 0
要防止这种情况,最好先判断一下输入数据的合法性
int flag,result=0;
char temp[2];
while (1)
{
printf("%s", "请输入字符:");
if (result == 0)
{
result = scanf("%d",&flag);
if (result == 1)
{
return flag;
break;
}
printf("%s\n","警告: 非法字符!");
result = 2;
continue;
}
if (result == 2)
{
result = scanf("%s %d", temp, &flag) ;
if (result == 2)
{ return flag;
break;
}
printf("%s\n","警告: 非法字符!");
result = 2;
continue;
}
}Top
9 楼gezihou(无名)回复于 2003-08-04 22:44:05 得分 5
应该查查<<操作符函数的返回值,似乎在输入数据类型与应付值的数据类型不相符时返回值为FALSE。Top
10 楼jargon(悠来悠去的鱼)回复于 2003-08-11 17:51:20 得分 0
我说的所谓停止输入是程序不接受输入了,但是没有报错,下边还是可以继续执行的Top




