1

ケース 3 は、構造にブックを追加するオプションです。スペースのないタイトルの本が追加されている限り、それらは問題ありません。スペースを含む名前を入力しようとすると、無限ループを実行した場合と同じように、コンパイラーが狂ってしまいます。なぜ、そして解決策は何ですか?

struct bookStruct
{
    string bookTitle;
    int bookPageN;
    int bookReview;
    float bookPrice;
};

const int MAX_BOOKS=10;



case 3:
        {
            for(int i=0;i<MAX_BOOKS;i++)
            {
                if(books[i].bookTitle=="\0")
                {
                cout << "\nPlease Enter the Title: ";
                cin >> books[i].bookTitle ;
                cout << "\nPlease Enter Total Number of Pages: ";
                cin >> books[i].bookPageN ;
                cout << "\nPlease Enter Rating (stars): ";
                cin >> books[i].bookReview ;
                cout << "\nPlease Enter Price: ";
                cin >> books[i].bookPrice;
                cout << "\n\nBook Added.\n\n";
                break;
                }
            }break;

        }
4

1 に答える 1

4

入力演算子>>は、文字列を読み取るときにスペースで停止します。
使いたいのはstd::getline.

cout << "\nPlease Enter the Title: ";
std::getline(std::cin, books[i].bookTitle);

数値を読み取るときの入力演算子>>も、スペースまたは改行で停止します (入力ストリームに残します)。したがって、次の本に戻るとき、入力ストリームにはまだ '\n' 文字があります。したがって、数値の場合は std::getline() も使用する必要があります。ただし、この場合、値を整数に変換する必要があります。

cout << "\nPlease Enter Total Number of Pages: ";
std::string line;
std::getline(std::cin, line);

std::stringstream linestream(line);
linestream >> books[i].bookPageN ;
于 2013-02-05T04:24:14.737 に答える