当输入 2x2 数组时,循环仅检查底行。
输入示例:
Input n, m:
2 2
Input a[2][2]:
1 2
3 4
Choose a number:
1
There is no such element
当输入 3x3 数组时,程序会提前结束并出现错误代码 139。
Input n, m:
3 3
Input a[3][3]:
1 2 3
4 5 6
7 8 9
这是程序:
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
int n, m, i, j, b, k;
float a[n][m];
cout << "Input n, m:\n";
cin >> n >> m;
cout << "Input a[" << n << "][" << m << "]:\n";
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
cin >> a[i][j];
}
}
cout << "Choose a number:\n";
cin >> b;
k = -1;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (a[i][j] == b) {
k = j;
break;
}
}
}
if (k >= 0)
cout << "Number of a column with a number: " << j << "\n";
else
cout << "There is no such element" << endl;
getch();
}
你显然不明白该程序是如何工作的。
变量在此块中声明。但它们没有初始化。那些。变量n和m可以包含任何垃圾。那些。事实上,它可以是0,也可以是任何其他数字。
然后根据这些变量定义一个数组。它也可以是任何大小。
当用户输入变量n和m的值时,这并不意味着数组a恰好变成这个大小。对于他来说,在这种情况下,没有任何改变。
然后你写到哪里,其实也不清楚。并且不清楚您从哪里读取数据。一般来说,你的程序在向数组写入值的层面上没有崩溃是很奇怪的。
可以做什么以及如何修复该程序:
路径是正确的,但对于初学者来说可能不太容易。不要在程序开头声明数组,而是声明指针。然后,在输入值n和m 后,分配所需的内存量并通过指针从数组中进行工作。完成工作后,不要忘记清除内存。
路径不是很正确,但是很简单。最初声明一个固定大小的数组。例如10乘10。将n和m
float a[10][10];值的输入限制在这个上限。那些。小于10。这样您将使用分配的内存。哪怕只是其中的一个片段。还有一件事。在您的循环中,在这两种情况下都表明循环最多为n
虽然显然这意味着应该有