如何在C++的do-while循环中正确终止程序?
问题分析与修复方案
核心问题
你代码里的第一个if判断条件用错了逻辑运算符:原本应该用&&(逻辑与)来判断索引是否合法,结果写成了||(逻辑或)。这会导致非法索引(比如i=-1、i=10)也会进入第一个if块,执行myData[i]=v时触发数组越界访问,直接引发程序崩溃,根本走不到第二个if的退出逻辑。
修复步骤
- 将第一个
if的条件i>=0||i<10改为i>=0&&i<10,确保只有合法索引才会修改数组元素; - 可以把两个
if合并成if-else结构,让逻辑更清晰; - 内层循环的变量建议换个名字(比如
idx),避免和外层的i重名,提升代码可读性。
修正后的代码
#include <iostream> using namespace std; int main() { int myData[10]; for(int i=0;i<10;i++){ myData[i] = 1; cout<<myData[i]; } do{ int i; cout<<endl<<"Input index: "; cin>> i; int v; cout<<endl<<"Input value: "; cin>>v; if(i>=0 && i<10){ myData[i]=v; for(int idx=0;idx<10;idx++){ cout<<myData[idx]<<" "; } } else { cout<<"Index out of range. Exit."; return 0; } }while(1); }
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

