为什么会停止输入?for(n=0; cin>>num[n]; n++);

jargon 2003-08-04 06:38:20
#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++);时,输入的是非整数,就会停止输入?
...全文
77 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jargon 2003-08-11
  • 打赏
  • 举报
回复
我说的所谓停止输入是程序不接受输入了,但是没有报错,下边还是可以继续执行的
gezihou 2003-08-04
  • 打赏
  • 举报
回复
应该查查<<操作符函数的返回值,似乎在输入数据类型与应付值的数据类型不相符时返回值为FALSE。
ForFar 2003-08-04
  • 打赏
  • 举报
回复
要防止这种情况,最好先判断一下输入数据的合法性
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;
}
}
StdAfx 2003-08-04
  • 打赏
  • 举报
回复
但你这个问题,我觉得还是很容易接受的。既然类型不符,那就应该退出,不然你觉得怎样才是合理的呢?但产生这个问题的本质原因和怎么解决确实是值得研究的。
StdAfx 2003-08-04
  • 打赏
  • 举报
回复
你这个问题比较复杂,你必须想办法保证是正确的类型才能处理,否者会出错,而且不好解决。你可以看下面的帖子,也是类似的错误引起的。

http://expert.csdn.net/Expert/topic/1430/1430514.xml?temp=.5895349

我到目前也没有想出什么好的方法来解决这类问题。
jargon 2003-08-04
  • 打赏
  • 举报
回复
我上面说错了,n是用来记录输入次数的,而不是将输入值赋给n的,所以楼上的说的好像也不对
jargon 2003-08-04
  • 打赏
  • 举报
回复
楼上说的好像有些道理,我也是这样想的,,再上面的两个说的不对,你们可以调试一下,不是死循环的
等等就下山 2003-08-04
  • 打赏
  • 举报
回复
for(n=0; cin>>num[n]; n++);

可能是这样,当n为非整数时,num[n]不成立,因此跳出循环
不过没上机调试,不知道是不是这样
叶子哟 2003-08-04
  • 打赏
  • 举报
回复
死循环了
GZCompiler 2003-08-04
  • 打赏
  • 举报
回复
循环怎么没有结束条件?

改:
for(n=0;n<max_size;cin>>num[n],n++);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧