You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ while循环仅执行1次程序提前终止问题求助

问题原因详解

你遇到的程序完成1次输入就终止的问题,核心是数组越界访问导致程序崩溃,还有几个关联的逻辑错误,逐一说明:

    1. 越界访问是直接诱因
      第一次进入循环时i=0,完成输入后执行++i,此时i=1,numbers和unit数组都只存了1个元素(C++数组索引从0开始,此时有效索引只有0)。但你后续代码没有对i做判断就直接执行了:
cout << "Therefore\nValue 1 = " << numbers[0] << " meters\n" << "Value 2 = " << numbers[1] << " meters\n";

这里访问了还不存在的numbers[1]和后续代码里的unit[1],这种越界访问属于C++的未定义行为,绝大多数情况会直接触发程序崩溃退出,自然不会执行下一轮循环。

    1. 逻辑判断的优先级错误
      C++中&&的优先级高于||,你写的判断逻辑比如:
if (i == 1 && unit[0] == "m" || unit[0] == "meters")

实际执行逻辑是if( (i==1且unit[0]是m) 或者 (unit[0]是meters) ),只要unit[0]是meters,不管i是不是1都会触发,和你想要的「i等于1,且unit[0]是m/meters」的逻辑不符,正确写法是给或判断加括号:

if (i == 1 && (unit[0] == "m" || unit[0] == "meters"))

所有同类型的判断都要加这个括号,不然逻辑会完全走歪。

    1. 循环条件不符合需求
      你要输入2组数据,i从0开始计数的话,循环条件应该是i < 2,你现在写的i <= 2会循环3次,输入3组数据,和你的功能需求不符。
    1. 逻辑结构错误
      你现在把单位转换、两个数值比较的代码全都写在循环内部,每次循环都会执行一遍,逻辑完全不对。正确的结构是:循环只做输入的事,等2组数据全部输入完成后,再统一做单位转换、比较、输出结果的逻辑。
    1. 单位转换的笔误
      第二组数据的单位转换逻辑里,比如cm转换的输出用了numbers[0]/100,ft转换的输出也用了numbers[0]*0.3048,这里应该用numbers[1],属于笔误,会导致输出的转换值错误。

内容的提问来源于stack exchange,提问作者MegaNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 15:54:03