C++中用户输入数组元素连续相减功能的实现方案问询
数组连续相减功能实现方案
核心调整点:需要把count的判断逻辑前置,避免对终止指令做atoi类型转换,再对应两种思路补充代码:
思路1:边输入边计算(无需二次遍历)
对应你提到的第一种思路,输入的同时直接做运算,代码实现如下:
string input[100]; int arrayInput[100]; int x = 0; // 补充计数变量,统计有效输入的数值个数 int validNumCount = 0; // 调整循环条件,避免数组越界 for (int i = 0; i < 100; i++) { cout << "Number " << i+1 << ": "; cin >> input[i]; // 先判断是否是终止指令 if (input[i] == "count") { cout << "Result: " << x << endl; // 输入终止后跳出循环,避免无限运行 break; } arrayInput[i] = atoi(input[i].c_str()); validNumCount++; // 连续相减逻辑 if (validNumCount == 1) { // 第一个数值直接赋值给x作为初始值 x = arrayInput[i]; } else { // 后续数值直接用x累减 x -= arrayInput[i]; } }
逻辑说明
- 第一个输入的有效数值直接作为初始值存入x,完全符合
1-2-3...的计算规则 - 每输入一个新的有效数值直接执行累减,不需要额外存储所有数值后再遍历
- 补充了数组越界防护,最多支持100个有效数值输入
思路2:先收集所有输入再统一计算
对应你提到的第二种思路,先存完所有数值再统一计算,代码实现如下:
string input[100]; int arrayInput[100]; int x = 0; // 补充计数变量,统计有效输入的数值个数 int validNumCount = 0; for (int i = 0; i < 100; i++) { cout << "Number " << i+1 << ": "; cin >> input[i]; // 先判断是否是终止指令 if (input[i] == "count") { // 收集完成后统一计算 if (validNumCount > 0) { x = arrayInput[0]; for (int j = 1; j < validNumCount; j++) { x -= arrayInput[j]; } } cout << "Result: " << x << endl; break; } arrayInput[i] = atoi(input[i].c_str()); validNumCount++; }
逻辑说明
- 输入阶段仅做数值存储和计数,不执行运算
- 收到终止指令后,从第一个有效数值开始遍历执行连续相减
- 适合需要保留所有输入原始数值做后续其他计算的场景
边界情况兼容
两种实现都支持以下场景:
- 用户直接输入
count:输出结果为0 - 用户仅输入1个有效数值后输入
count:输出结果为该数值本身 - 输入满100个有效数值后自动终止,避免数组越界
内容的提问来源于stack exchange,提问作者Riiko
相关产品推荐
相关产品推荐

