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(奇数)。
核心解答
[i-1]不控制程序终止
程序的终止逻辑由for循环的条件i <= y和main函数的return 0决定:当循环变量i递增到超过用户输入的y时,循环结束,随后main函数执行return 0,程序正常退出。[i-1]和程序终止完全无关。[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,完美匹配数组里的对应元素。
- 与用户输入、数组的交互逻辑
- 用户输入的
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
相关产品推荐
相关产品推荐

