CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

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

楼主jargon(悠来悠去的鱼)2003-08-04 18:38:20 在 VC/MFC / 基础类 提问

#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

相关问题

  • 为什么getline(cin,string,'\n')要输入两个回车才能推出输入?
  • Cin输入,如何控制输入的个数
  • 急!求N! N是一个任意输入的很大的数
  • 我想输入n个空格,用什么函数?
  • 输入N个数,比较大小~~从大到小输出
  • cin判断数字和字符同时输入的问题
  • 提问,cin输入包含空格的字符串的问题.
  • 有关cin对string输入的一点疑问!
  • cin的问题,如何输入动态字符数组
  • 用 cin 输入数据是为什么不够强壮????

关键词

  • 字符
  • 输入
  • cin
  • 整数
  • num
  • flag
  • 标准
  • result
  • 问题
  • arg

得分解答快速导航

  • 帖主:jargon
  • StdAfx
  • gezihou

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo