2016-12-02 14 views
-1
string command; 
int ZaneNightTrain; 

NightTrain: 

cin.ignore(); 
getline(cin, command); 
transform(command.begin(), command.end(),command.begin(), ::toupper); 
if (command == "TALK TO ZANE") 
{ 

    if (ZaneNightTrain == 0) 
    { 
     cout << "\nZane: Blah Blah Blah 1\n\n"; 
     ZaneNightTrain++; 

     goto NightTrain; 
    } 
} 
else if (ZaneNightTrain == 1) 
{ 
    cout << "\nZane: Blah blah blah 2\n" << endl; 
    ZaneNightTrain++; 
    goto NightTrain; 
} 
else if (ZaneNightTrain == 2) 
{ 
    cout << "\nBlah blah blah 3\n" << endl; 

    ZaneNightTrain = 0; 

    goto NightTrain; 
} 

return 0; 
} 

ZaneNightTrain = 0の理由はわかりません。プログラムを自動的に終了します。私は2に番号を設定することができ、それは何をしているはずです。私はそれを設定しようとしたので、彼が言う最初のことは0ではなく1であり、プログラムを終了することにもなります。私はこのコードの別のバージョンを持っていました。あなたが話す文字列の代わりに数字を入力しても問題はありません。整数の値を設定した後、プログラムが早く終了する

+2

このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低でも、あなたはあなたが行った観察と一緒に、[編集]あなたの質問あなたの問題を再現[、最小完全、かつ検証](http://stackoverflow.com/help/mcve)の例を含むようにする必要があります\しますデバッガ。 –

+0

この質問は現在、推測なしには答えられません。示唆:これらのgotoを良い、テスト可能な条件を持つループに置き換えてから、条件に入るものを見てください。なぜ自分のことをとても難しくするのですか? – user4581301

+0

'command'が" ZONEに話しかける "のでなければ、' ZaneNightTrain'が1または2以外であれば、関数の最後のリターンが実行されます。 – 1201ProgramAlarm

答えて

2

あなたはより完全に何が起こっているかを理解するのに役立つことがあり、この前の質問ZaneNightTrain

int ZaneNightTrain = 0; 

の値を初期化していません。 Why do I see strange values when I print uninitialized variables?

TLDRが宣言された変数の値が保証されないと、あなたのプログラムの最初の操作としてそれをチェックしようとしている場合は、デフォルト値に設定しなければならないということです。

+0

私はそれを試みました。 0の数字がまだ上がっているようです。 – Dave

+0

比較の前に変数の値を見るには、いくつかのcout文を追加するデバッガを接続するか、彼らはおそらくあなたが思うものではありません。 – sclarson

関連する問題