以下代码有什么问题?

时间:2019-09-17 14:12:49

标签: c++ arrays for-loop if-statement

在'{'令牌之前的第23行(预期为')'和在第37行(无法将赋值转换为'int')中出现错误,我该如何解决theese? (该程序的功能是使用N根棒(必须使用每根棒)来查找可以制作多少个三角形。)

#include <iostream>

using namespace std;

int a,b,c,db=0,n, i, j, k;
bool already = false;

int main()
{
    cout << "n = ";
    cin >> n;

    int myarray[n][n][n];

    for(a = 1; a < n; a++){
        for(b = 1; b < n; b++){
            for(c = 1; c < n; c++){
                if(a+b>c && a+c>b && c+b>a && a+b+c==n){
                    while(!already){
                        for(i = 0; i < n; i++){
                            for(j = 0; j < n; j++){
                                for(k = 0; k < n; k++){
                                    if(myarray[i][j][k] == {{a},{b},{c}} || myarray[i][j][k] == {{a},{c},{b}} || myarray[i][j][k] == {{b},{a},{c}} || myarray[i][j][k] == {{b},{c},{a}} || myarray[i][j][k] == {{c},{a},{b}} || myarray[i][j][k] == {{c},{b},{a}}){
                                        already = true;
                                        cout <<myarray[i][j][k];
                                        break;
                                    }
                                }
                            }
                        }
                    }

                    if(already == false){
                    cout << "db's actual value: " << db << endl;
                    cout << "A= " << a << " B= " << b << " C= " << c << endl;
                    }
                myarray[i][j][k] = {{a}, {b}, {c}};
                already = false;
                }
            }
        }
    }
    cout << db <<" triangles could be made. " <<endl;
    cin.get();
}

1 个答案:

答案 0 :(得分:1)

从Ubuntu上的g ++中检查以下g++ -std=c++11 wierd.cpp编译结果:

wierd.cpp: In function ‘int main()’:
wierd.cpp:23:60: error: expected primary-expression before ‘{’ token
                                     if(myarray[i][j][k] == {{a},{b},{c}} || myarray[i][j][k] == {{a},{c},{b}} || myarray[i][j][k] == {{b},{a},{c}} || myarray[i][j][k] == {{b},{c},
                                                            ^

您的问题是,您正在比较使用初始化程序。即使在C ++ 11中,我也不认为这是合法的。另外,您正在将myarray[i][j][k]与不合法的二维数组进行比较。

wierd.cpp:23:60: error: expected ‘)’ before ‘{’ token
wierd.cpp:37:34: error: cannot convert ‘<brace-enclosed initializer list>’ to ‘int’ in assignment
                 myarray[i][j][k] = {{a}, {b}, {c}};

这里的问题是您试图将二维数组(或更确切地说是其初始化程序)分配给类型为int的变量。实际上,myarray[i][j][k]int中类型为myarray的元素。

请注意,在同一行上这也将是非法的:

myarray = {{a}, {b}, {c}};

它正在从初始化列表中分配给数组。

根据您发布的代码和错误,我想您不知道myarray是什么。

myarray的类型为int[][][],这意味着它是一个包含整数数组的二维数组,即int[][],因此在每个位置上都有一个数组。因此,对于任何有效的a和b:myarray[a][b]包含整数的一维数组,即int[]。因此,对于任何有效的a和b以及c:myarray[a][b][c]包含单个int值。

您的代码也没有解释您要做什么。因此,我的回答仅说明了错误所在。也许另外一个问题会帮助您实现目标。

编辑

您的数组初始化器是二维的,而不是三维的。正确的初始化程序应为{{{a}},{{b}},{{c}}},这将导致三个int出现在数组中,而只有那些int。

myarray[0][0][0] == a
myarray[1][0][0] == b
myarray[2][0][0] == c