为什么数组不打印整个表?

时间:2015-04-28 10:57:36

标签: c++

#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的窗口。 没有编译错误,我无法找到问题。有人可以提供帮助吗?

3 个答案:

答案 0 :(得分:2)

您使用变量dm作为循环的计数变量,但在循环内部,您使用两者的最大值(districtsmonths而不是dm

答案 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 ++。如果该构造适合您,则您的编译器支持非标准扩展。