整数的值是变化的,不经过任何计算

The value of integer is changing without any calculation

我不知道为什么即使没有计算过程,整数的值也会突然改变,这是我的程序代码:

#include <iostream>
using namespace std;

int main()
{
    int n;

    int a[] = {};
    int b[] = {};

    cin >> n;
    cout << "\n";

    for(int i=0;i<n;i++)
        cin >> a[i];

    cout << "\n";

    for(int i=0;i<n;i++)
        cin >> b[i];

    cout << "\n";

    for(int i=0;i<n;i++)
        cout << a[i] << " " << b[i] << "\n";

    cout << n;
}

所以如果我输入的n值小于5,代码就没有问题。但是,如果我将 n 的值设置为高于 4,则整数 a[i] 的值将以某种方式跟随 b[i] 的值,并且 n 的值与我输入的值不同。 例如它是这样的 输入:

10

1
2
3
4
5
6
7
8

91
92
93
94
95
96
97
98

输出:

95 91
96 92
97 93
98 94
5 95
6 96
7 97
8 98
8

如你所见,n的值从10变为8,循环只发生了8次。为什么 n 和 a[i] 的值在变化?感谢任何帮助,谢谢

这些声明

int a[] = {};
int b[] = {};

调用未定义的行为,因为您不能声明元素数等于 0 的数组。

您似乎在尝试使用非标准 C++ 功能的可变长度数组。

不过,如果编译器支持这个特性,那么你至少需要写

int n;

cin >> n;
cout << "\n";

int a[n];
int b[n];

for(int i=0;i<n;i++)
    cin >> a[i];

也就是说,你可以在变量 n 具有正值之后声明数组。

但最好不要使用 non-standard 语言扩展。因此,您应该使用标准容器 std::vector<int>.

而不是可变长度数组

你应该在行 cin >> n:

之后像这样声明你的数组 a 和 b
int a[n];
int b[n];

避免弗拉德所说的未定义行为。在运行时声明数组长度在 C++ 中不是标准的,因此您可以改用 std::vector 或 malloc,如:

int n;

cin >> n;
cout << "\n";

int *a = (int *) malloc(n*sizeof(int));
int *b = (int *) malloc(n*sizeof(int));