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

C++程序中[i-1]的作用是什么?与输入及数组的交互逻辑

代码中[i-1]的作用解析

问题背景

我刚完成一项作业,程序可正常运行,但不清楚代码中的[i-1]的作用。它是否根据用户输入控制程序终止?它如何与用户输入和数组交互?

程序代码:

#include <iostream>
#include <string>
using namespace std;

int main() {

    int x;
    int y;

    cin >> x;
    cin >> y;

    string nums[] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

    for (int i = x; i <= y; i++) {

        if (i <= 9) {
            cout << nums[i-1] << endl;
        }
        else if (i > 9 && i % 2 == 0) {
            cout << "even" << endl;
        }
        else if (i > 9 && i % 2 != 0) {
            cout << "odd" << endl;
        }
    }
    return 0;
}

该程序根据用户输入的两个int型数值输出指定范围内容:1-9输出对应英文拼写,大于9的数依次输出even(偶数)或odd(奇数)。


核心解答

  1. [i-1]不控制程序终止
    程序的终止逻辑由for循环的条件i <= y和main函数的return 0决定:当循环变量i递增到超过用户输入的y时,循环结束,随后main函数执行return 0,程序正常退出。[i-1]和程序终止完全无关。

  2. [i-1]的核心作用:匹配数组下标与数字
    C++中的数组采用0起始索引——数组的第一个元素下标是0,第二个是1,直到最后一个元素下标为数组长度-1。

  • 你的nums数组里,nums[0]对应数字1的英文"one",nums[1]对应数字2的"two"……nums[8]对应数字9的"nine"。
  • 循环变量i是用户输入范围内的数字(比如1-9),要让数字i对应到数组里的正确英文,就需要把i转换成数组的下标:用i-1就能把数字1转成下标0,数字2转成下标1……数字9转成下标8,完美匹配数组里的对应元素。
  1. 与用户输入、数组的交互逻辑
  • 用户输入的x和y确定了循环的范围,当i落在1-9区间时,程序进入第一个if分支。
  • 举个例子:如果用户输入x=2、y=4,循环中i依次为2、3、4,对应的i-1就是1、2、3,分别取nums[1]("two")、nums[2]("three")、nums[3]("four"),正好输出对应数字的英文。
  • 如果不用i-1,直接写nums[i],当i=1时会取到nums[1]("two"),出现数字和英文不匹配的错误;当i=9时,nums[9]超出了数组的有效下标范围(数组只有9个元素,最大下标是8),会触发数组越界访问的未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:25:57