使用多维数组时不编译

时间:2015-08-01 18:28:15

标签: c++ arrays

该程序的功能是查看数组的元素是否合计为零。

某些元素可能是负数,用户输入将包含此多维数组中每行的3个整数。

程序只应在满足整数n条件时启动。

#import <iostream>

using namespace std;

int main (){

int n;
int myArray[2][2];
cin >> n;
int i;
int j;

if (1<n<100)
{
for (i=0; i!=3; i++)
{
    for (j=0; j != 3; j++)
        cin >> myArray[i][j];
}
    {
        int l = myArray[i][j] + myArray[i][j];
        if (l==0)
        {
            cout << "Yes";
        }
        else
            cout << "No";
    }

}
else
cout << "foo";

return 0;

}

2 个答案:

答案 0 :(得分:1)

#import <iostream>

应该是

#include<iostream>

接下来,

if (1 < n < 100)

可悲的是,C ++不喜欢这种语法。每个比较都需要自己处理。

if (1 < n && n < 100)

这里的大括号可能不是你想要的。

for (i=0; i!=3; i++)
{
    for (j=0; j != 3; j++)
        cin >> myArray[i][j];
}// looks OK, but made suspicious by the next line
    { //open brace with no conditional attached. Valid, but unusual enough to draw 
      // a second glance
        int l = myArray[i][j] + myArray[i][j];
        if (l==0)
        {
            cout << "Yes";
        }
        else
            cout << "No";
    }

清理格式显示:

    for (i = 0; i != 3; i++)
    {
        for (j = 0; j != 3; j++)
            cin >> myArray[i][j];
    }
    {
        int l = myArray[i][j] + myArray[i][j];
        if (l == 0)
        {
            cout << "Yes";
        }
        else
            cout << "No";
    }

int l = myArray[i][j] + myArray[i][j];开头的块未附加到任何条件,并且将始终运行。

不确定你在这里要做什么,所以我只能猜测一下。这个猜测也没有多大意义。

我建议您在使用条件表达式时始终使用所有大括号来保护自己,并使代码的流程对其他人更具可读性。

但是等等!还有更多!

int myArray[2][2];

定义具有两行和两列(0和1)的2D数组。但是这个:

for (i = 0; i != 3; i++)
{
    for (j = 0; j != 3; j++)
    {
        cin >> myArray[i][j];
    }
}

将尝试访问3行和3列(0,1和2)。这会编译并表现出不良行为,如果你很幸运会导致程序崩溃。如果你不幸运,它看起来会有效,但会在程序中悄然破坏其他东西。

答案 1 :(得分:0)

你的程序中有很多错误

其中一些逻辑错误

您的第一个错误是当您检查输入n时条件不正确并始终返回true (1<n<100)而应该(1<n && n<100)给您什么你期待它

你的第二个错误是超出范围的数组索引

myArray[2][2]; 

每行和每列只有2个元素,你在for循环中输入3个元素到它的索引0,1,2

for (i=0; i!=3; i++)
{
    for (j=0; j != 3; j++)
        cin >> myArray[i][j];
}

阵列应为myArray[3][3];

或for循环应该是:

 for (i=0; i!=2; i++)
        {
            for (j=0; j !=2; j++)
                cin >> myArray[i][j];
        }

这句话没有条件且不符合逻辑:

 int l = myArray[i][j] + myArray[i][j];

仅在i=3j=3 myArray[3][3]

时执行

l的结果总是值为:

myArray[3][3]+myArray[3][3]

但是myArray[3][3]是数组索引超出范围

所以它总是打印"No"

我希望你现在能理解你的错误