簡體   English   中英

以下代碼有什么問題?

[英]What are the problems in the following code?

第23行(預期“'””在“ {”令牌之前)和第37行(無法將賦值轉換為“ int”)中出現錯誤,我該如何解決這些問題? (該程序的功能是通過使用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();
}

在Ubuntu上從g ++ g++ -std=c++11 wierd.cpp出此輸出,如下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]實際上是myarray int類型的元素。

請注意,這在同一行上也是非法的:

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

它是從初始化列表中分配給數組的。

從您發布的代碼和錯誤中,我不知道您知道什么是myarray

myarray的類型為int[][][] ,這意味着它是一個包含int的二維數組的數組,即int[][] ,因此在每個位置上您都會擁有一個數組。 因此,對於任何有效的a和b: myarray[a][b]包含int的一維數組,即int[] 因此,對於任何有效的a和b以及c: myarray[a][b][c]包含單個int值。

您的代碼也沒有解釋您要做什么。 因此,我的回答僅說明了錯誤所在。 也許一個單獨的問題會幫助您實現目標。

編輯

您的數組初始化器是二維的,而不是三維的。 正確的初始值設定項應為{{{a}},{{b}},{{c}}} ,這將導致數組中包含三個整數,並且僅包含這些整數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM