c++ - 预期输出之后的所有这些数字是多少?

标签 c++ for-loop

我试图编写一个程序来获取输入并输出该输入的反向;这是我的代码:

#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/

相关文章:

c++ - 围绕 C Dirent.h 的现代 C++ 包装器

java - 错误地使用for循环

java - 从 for 循环到 Java 8 Stream 的例子

c# - 循环和更改列表 - 删除并不总是有效

r - R中的for循环计算列表的平均值

c++ - clang/g++ 与友元函数的区别

c++ - C++中的多态迭代器

python - 在 Python 中重做 for 循环迭代

c++ - Qt3D骨骼动画

c++ - 有没有允许这种语法的常用 C++ 编译器?