3

C++ でユーザーから文字列を取得するコードを作成しました。ここにコードがあります

#include<iostream>
#include<string>
using namespace std;
string input;
void enterstring()
{
    cout<<"\nEnter input: ";
    getline(cin,input);

}
void displaystring()
{
    cout<<"\nyour string is "<<input<<endl;

}
{
    int main()
{
int choice=0;
while(choice!=3)
{

    cout<<"Enter choice: "<<;
          cin>>choice;
    switch(choice)
    {
        case 1: enterstring();
        break;
        case 2: displaystring();
        break;
        case 3: cout<<"\nQuit";
        break;
        default: cout<<"\ninvalid choice try again";
        break;


    }
    return 0;
}

上記のコードの出力:

Enter choice: 1
Enter input: 
Enter choice:

入力セクションがスキップされます なぜ問題がどこにあるのかわかりません。ロジックが間違っていますか、構文に問題がありますか。whileループなどを使わずに関数を呼び出すとうまくいきますが、この場合はうまくいきません。助けて。

4

2 に答える 2

3

問題は、choice を int として読み取っているのに、入力が改行を含む文字列であることです。

あなたの例では、入力は 1 ではありません。"1\n" 1 は int として選択され、'\n' はバッファ内にあります。関数がバッファから読み取った getline 関数を呼び出すと、改行が見つかり、空の文字列が返されます。これを避けるには、choice を文字列として読み取り、atoi を使用して int にキャストする必要があります。

編集:

あなたが正しいです。まだ機能していません。しかし、ここには動作するバージョンがあります。

#include <iostream>
#include <string>

using namespace std;
string input;
void enterstring(){
    cout<<"\nEnter input: ";
    cin.ignore();
    getline(cin,input);
}

void displaystring(){
    cout<<"\nyour string is "<<input<<endl;
}

int main(){
    int choice=0;
    while(choice!=3){
        cout<<"Enter choice: ";
        cin>>choice;
        switch(choice){
            case 1: enterstring();
            break;
            case 2: displaystring();
            break;
            case 3: cout<<"\nQuit";
            break;
            default: cout<<"\ninvalid choice try again";
            break;
        }
    }
    return 0;
}
于 2012-10-15T08:15:10.280 に答える
1

投稿したコードは無効です: "afterがありませんEnter choice :

それに加えて、あなたのコードはideoneで動作しているようです(インデントを追加し、いくつかの小さなバグを修正しました。main関数も追加しました)。ここで見ることができます: http://ideone.com/ozvB1

于 2012-10-15T08:20:35.090 に答える