代码1:应该采用一个矩阵(m×n)的大小,然后在每一行中找到最小值。不显示任何错误,可以运行,但是编译器的黑屏(devc ++)根本不执行任何操作而崩溃,并且返回值高得离谱(准确地说是3221225725)。
我不确定如何修复或改进它,当矩阵的大小恒定时它也可以工作,比如用cin代替cin来获得大小,那么简单的数字就可以使它工作。我不知道为什么;我是编程新手。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int m,n;
int B[m][n];
int A[m+1][n+1] = {0};
cin>>m;
cin>>n;
for (int x = 0; x < m; ++x)
{
for (int y = 0; y < n; ++y)
{
cout<< "Enter in value for row " << x << ", column " << y << ".\n";
cin>> A[x][y];
}
}
cout << "Input:" <<endl;
for (int x = 0; x < m; ++x)
{
for (int y = 0; y < n; ++y)
{
cout<< A[x][y] << "\t";
}
cout << "\n";
}
for (int x = 0; x < m; ++x)
{
for (int y = 0; y < n; ++y)
{
A[x][4] = A[x][1];
if (A[x][4] > A[x][y])
A[x][4] = A[x][y];
}
}
cout <<"Output:"<<endl;
for (int x = 0; x < m+1; ++x)
{
for (int y = 0; y < n+1; ++y)
{
cout << A[x][y] << "\t";
}
cout<<"\n";
}
getchar ();
return 0;
}
这是代码2:
#include <iostream>
#include <math.h>
using namespace std;
int main ()
{
int i,j,R,C,Too;
double a[i][j];
float f;
Too=0;
cin>>R;
cin>>C;
for (int i=0; i<R; i++)
for (int j=0; j<C; j++)
{
f=i+j/2;
a[i][j]=sin(f);
if (a[i][j]>0)
{
Too=Too+1;
}
cout << "a[" << i << "][" << j << "]: ";
cout << a[i][j]<< endl;
}
cout<<Too<<" Shirheg eyreg element bn"<<endl;
}
该矩阵中的元素由公式f = i + j / 2生成; a [i] [j] = sin(f); 并简单地输出其中有多少个积极因素。由于某些奇怪的原因,元素总是两倍,就像输出是这样的: 0 0 0.841471 0.841471 然后另一个数字加倍,然后一个数字再加倍。 如何解决?
答案 0 :(得分:0)
奇怪的返回值和在C ++中工作时崩溃通常是未初始化值的标志。例如,考虑以下内容:
int main() {
int m,n; // <-- declare 'm' and 'n', but we don't initialize them to have a value
int B[m][n]; // <-- use the values in 'm' and 'n' to allocate memory for 'B'
...
cin >> m; // <-- only now are you setting m to a value, but you already used it.
cin >> n; // <-- same thing with n.
...
}
上面的代码是错误的,因为它使用由'm'和'n'标识的变量,然后才将它们设置为具有特定值,因此,在您使用cin设置它们的值之前,它们恰好具有任何值在创建它们时坐在内存中。
为它们分配值称为“初始化”或在您初次执行时对其进行初始化。在此之前,他们只是从内存中保存该值。
最终,每一行代码都使用一些变量,并且可能正在分配其他变量。因此,在到达该行代码之前,请确保已使用的每个变量都已初始化。
您必须调试自己的代码才能有效学习,以上示例不是此处的唯一错误或问题,而是一些可以帮助您的基本技巧:
int i
,则不应在该函数的循环中声明int i
。我现在两个人的意思不同,这令人困惑。<<
和>>
运算符周围放置空格。它将使代码更易于阅读。