0

配列とcinを使用したwhileループを使用してユーザーに名前を入力させようとしていますが、最後の人の名前が入力された後、先に進む代わりにプログラムがクラッシュします。これを修正する方法はありますか、それともコードを完全に変更する必要がありますか? 私はC ++にもかなり慣れていないので、できるだけ簡単に答えてもらえますか?

#include <iostream>
#include <string>

using namespace std;

int main()
{
    unsigned int numberofplayers;
        number://loop back here if more than 4 players
    cout << "Number of players: ";
    cin >> numberofplayers;
        if(numberofplayers > 4 || numberofplayers < 1){
            cout << "Invalid number, please enter a number from 1 to 4." << endl;
            goto number;
        }
    string name[numberofplayers];
    cout << "Enter your name" << endl;
    int a = 1;
    while(a < numberofplayers + 1){
        cout << "Player " << a << ": ";
        cin >> name[a];
        cout << "Hello, " << name[a] << "." << endl;
        a++;
    }

}
4

2 に答える 2

3

おそらく配列インデックスが境界外に直面するので、while ループをこれに変更しa=0、0 番目のインデックスから埋めるように設定します。

while(a < numberofplayers){

}
于 2013-04-19T23:21:56.273 に答える
2

最後の反復が配列のサイズを超えています。に変更する必要があります

while(a < numberofplayers)

また、別の注意として、キーワード goto はあまり使用されなくなりました。そこにもしばらく使用することをお勧めします

while(true){
    cout<<"number of players";
    cin>>numberofplayers
    if(numberofplayers is valid input){
        break;
    }
    cout<<"bad input";
}

ここで goto の使用について広く議論している stackoverflow に関する質問があります: GOTO はまだ有害と見なされていますか?

于 2013-04-19T23:27:11.540 に答える