我试图编写一个程序来获取输入并输出该输入的反向;这是我的代码:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int num[n];
for (int i=1; i<=n; i++)
{
cin >> num[i];
}
for (int i=n; i>=0; i--)
{
cout << num[i] << " ";
}
return 0;
}
我意识到在第二个for
循环中,i
可以等于0
然后i
等于-1
。但是,输出并没有真正意义。例如,输入
6
8 1 2 6 3 9
结果
9 3 6 2 1 8 8 8
很多时候它只是将数组颠倒过来,但在末尾添加了一个 8
,但有时会有这些类型的数字:
9
1 0 2 8 1 4 2 9 8
8 9 2 4 1 8 2 0 1 1703936
这些结尾数字从何而来?因为我不明白发生了什么,所以我不能概括问题是什么,但是如果你附近有一个易于访问的 IDE 并且会复制并粘贴我的代码(假设它不是一个众所周知的问题并且我是让每个人都笑我的愚蠢),谁能告诉我为什么要在末尾添加这些数字?
最佳答案
for (int i=1; i<=n; i++)
在 C++ 中,数组索引是0 索引。这意味着如果您的数组大小为 n
,则有效索引为 0, 1, 2, ..., n-1
。
您的循环将遍历 1, 2, 3, ..., n
。你看到问题了吗?您永远不会写入第 0 个索引,并且在最后一个索引之后写入一个索引(这是不允许的)。
然后当你去打印时:
for (int i=n; i>=0; i--)
你打印 n, n-1, n-2, ..., 0
。您正在打印第 n
个元素,这又是不允许的。
相反,您的循环应该如下所示:
for (int i=0; i<n; i++)
{
cin >> num[i];
}
for (int i = 0; i < n; i++)
{
cout << num[n - i - 1] << " ";
}
关于c++ - 预期输出之后的所有这些数字是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58943952/