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 回答