#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int d,m;
int districts=3;
int months = 12;
double sales[districts][months];
for (d=0 ; d < districts; d++)
{
for(m=0; m< months; m++)
{
cout << "Enter sales for District " << d+1 << ":" << " and Month " << m+1 << ": ";
cin >> sales[districts][months];
}
}
cout << "\n\n\n";
cout << setw(40) << "Months\n";
cout << setw(26) << "1 2 3 4 5 6 7 8 9 10 11 12\n";
for (d=0; d < districts ; d++)
{
cout << "District " << d+1;
for(m=0; m< months; m++)
{
cout << ": " << sales[districts][months];
}
}
return 0;
}
运行后此代码仅从用户获取两个输入值,然后出现一个显示消息a problem caused the program to stop working correctly
的窗口。
没有编译错误,我无法找到问题。有人可以提供帮助吗?
答案 0 :(得分:2)
您使用变量d
和m
作为循环的计数变量,但在循环内部,您使用两者的最大值(districts
和months
而不是d
和m
。
答案 1 :(得分:0)
将此更改为cin >> sales[districts][months];
:cin >> sales[d][m];
另外,对此:cout << ": " << sales[districts][months];
:cout << ": " << sales[d][m];
。
术语sales[districts][months]
指的是特定元素sales[3][12]
,它也恰好超出了2-d数组的范围。
答案 2 :(得分:0)
读取循环重复读取sales[districts][months]
的值,即sales[3][12]
,由于数组索引在所有维度中从零开始,因此不存在。这给出了未定义的行为。
输出循环重复输出相同的值,这也会产生未定义的行为。
未定义行为的常见症状(但不是唯一可能的)是异常程序终止 - 您正在看到一个示例。
还有皱纹
int districts=3;
int months = 12;
double sales[districts][months];
涉及可变长度数组(VLA),它是C的特征(来自1999 C标准或更高版本),但不是有效的C ++。如果该构造适合您,则您的编译器支持非标准扩展。