首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++数组与循环,都跳出循环了,如何该循环里还在运行哦

2012-10-15 
C++数组与循环,都跳出循环了,怎么该循环里还在运行哦?在看到一道程序练习题中编程遇到的问题。感觉for循环

C++数组与循环,都跳出循环了,怎么该循环里还在运行哦?
在看到一道程序练习题中编程遇到的问题。
感觉for循环用break;语句中断循环有些问题啊!

C/C++ code
#include<iostream>using namespace std;int main(int argc, char *argv[]){int n;cin>>n;int*a=new int[n];int i=0;for (;i<n;i++){ cin>>a[i]; if (a[i]=='m') {  break; } cout<<"i:"<<i<<endl;//都跳出循环了,怎么这里还有输出哦?}for (int j=i;j<n;j++)//这里相当于没有运行。{ a[j]=0;}for ( i=0;i<n;i++){ cout<<a[i]<<" ";}system("pause");}

//比如输入10个数,1,2,3,4,5 输入m终止循环,结果奇怪的事情发生了,本来break可以跳出循环的,但是cout<<"i:"<<i<<endl;依然在跳出循环后循环输出运行了4次,直到
i=10,而这4次没有执行cin>>a[i]语句。这是为什么?怎么用break;语句只能选择性中断啊?如果用while循环就没这个问题。
有人说这个是由于a[i]=='m'左操作数只能接收整数,而右边是字符,所以需要显示强制类型转换,但是我发现即使用强转也无法解决for循环在中断循环后,i累加到10的问题。

[解决办法]
我运行后,发现确实如你所说。
我觉得可能是这样。因为a是整型指针,而你输入字符m时,可能当成了非法字符,导致读取失败。由于没有清楚缓冲区,所以非法字符一直存在,导致接下来一直读取失败。你可以试下fflush类型的语句调试下。
break是可以用在for里的,这里因为一些IO的非常规操作导致看似不合常理。
仅供参考。不过你说在while里可行,值得进一步探讨。
[解决办法]
Gonefar的是正確答案
C/C++ code
std::cout << int('m')<<std::endl;    int n;    std::cin>>n;    int *a=new int[n];    int i=0;    for (;i<n;i++)    {        std::cin>> a[i];        if(std::cin)        {          if (a[i] == int('m'))          {            std::cout<<"break"<<std::endl;            std::cout << a[i] << std::endl;            break;          }        }        else if(!std::cin)        {            std::cout<<"cin is malfunction"<<std::endl;            break;        }        std::cout<<"i:"<<i<<std::endl;//都跳出循环了,怎么这里还有输出哦?    } 

热点排行