预期输出之后的所有这些数字是多少
What are all of these numbers following the expected output?
我正试图编写一个程序来接受一个输入并以该输入的相反方向输出;这是我的代码:
#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] << " ";
}
第二个循环以i
等于n
开始。。。但这不是有效的数组索引,因为包含n元素的数组具有索引[0..n-1]
!因此,您看到的是"内存垃圾">
所以,你的第二个循环应该是:
for (int i=n-1; i>=0; i--)
您似乎认为数组是从1开始索引的,这是您的主要问题。
for (int i=1; i<=n; i++)
数组的最后一个元素是length-1
,所以如果有3个元素,最后一个索引是2,而不是3;然而,上面的循环从1(第二个元素(开始,然后访问超出界限的索引,这是未定义的行为。
但实际上您根本不需要使用索引,只需for (auto& i : n)
就可以在容器上正确迭代。如果你想使用索引循环,你需要
for (int i = 0; i < n; i++) // forwards
for (int i = n-1; i >= 0; i--) //backwards
值得注意的是,可变长度数组(即在编译时长度未知的数组(不是标准C++,而是GCC的扩展。现在应该放弃这种行为,转而使用vector
:
int length = 0;
std::cin >> length;
std::vector<int> n(length);
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- C++ 检查结果数组中有多少次数字
- 如何计算整数链中使用了多少次数字?
- 预期输出之后的所有这些数字是多少
- 随机生成的输出中有多少位数字 1、2、3
- 0 和 n 之间有多少个数字满足按位属性 i&y==i?
- 给定 N 个范围.有多少种方法可以从这些范围中获取 N 个数字,这些数字的总和达到某个值
- N 阶乘中有多少位数字
- 小数点之后,如何指定有多少个数字
- 当用户确定将输入多少个数字时,需要程序来乘以用户输入
- 数字 0ui64 是多少
- 从序列中减去一个数字后,剩余的数字中有多少是正数
- 猜数字:计算机要猜多少次才能得到正确的数字
- N个整数与K对数字有多少个不能相邻的排列?
- 二进制表示中数字的偶数位和奇数位的 1 数是多少?
- 找出一个特定整数有多少个二进制数字
- 给定一系列数字报告,哪些重复和重复了多少次
- 如何计算每个数字遇到了多少次