整数的值是变化的,不经过任何计算
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));
我不知道为什么即使没有计算过程,整数的值也会突然改变,这是我的程序代码:
#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
:
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));