2016-09-28 6 views
1

CYMのいずれかを入力した場合、#Colorを入力するようにプログラムされたコードです。しかし、ユーザがWBGと入力した場合、プログラムは#Black&Whiteを印刷することになっています。残念ながら、私のコードは私の最初のforループをスキップし、#Black&Whiteを印刷することにまっすぐに行く、何が間違っているの?私のコードが動作しない理由を理解できませんでした - codeforce - Brainの写真

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<char>colors; 
    int row, column, letters = 0; 
    cin>>row, column; 
    letters = row * column; 

    for(int i = 0; i < letters; i++) 
    { 
    char temp; 
    cin>>temp; 
    colors.push_back(temp); 
    } 

    for(int j = 0; j < letters; j++) 
    { 
    if(colors[j] == 'C' || colors[j] == 'Y' || colors[j] == 'M') 
    { 
     cout<<"#color"<<endl; 
     return 0; 
    } 
    } 

    cout<<"#Black&White"<<endl; 

    return 0; 
} 
+0

'letters = row * column;はどのような値ですか? – code11

+0

文字がいくつあるのか(ベクトルが保持する文字数)を知っているだけです。ユーザは、行列のような値を入力すると仮定します。 –

答えて

2

カンマがそれらを分離cin>>row, column;ラインで2つの式を持っている、とcolumnは、この場合では役に立たない表現です。

おそらくcin >> row >> column;

columnが初期化されていない使用されている意味。値0が発生した場合、最初のループの本体は決して実行されません。このように初期化されていない変数を使用すると、未定義の動作につながる可能性があるので注意してください。

+0

うん、私はなぜそれを見ることができなかったのか分からない。ありがとう –

+0

問題ありません。あなたはg ++で偶然コンパイルしていますか?すべての警告を有効にするには '-Wall'スイッチを使います。 g ++ 5.xや間違いなく以前のバージョンでは、これは効果のないコンマ演算子の右オペランドに関する警告をスローし、 'column'は初期化されていない可能性があります。 – orphen

+0

はいcygwinでg ++を使用しています。私はこのコードを-Wallを有効にしてコンパイルしましたが、問題がありました。だからクーオール –

関連する問題