0
#include<iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int optionChosen=0;

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

const int MAX_BOOKS=10;

int main()
{
    bookStruct books[10]={};


    do
    {
        cout << "Please Select an Option from the Menu:\n\n" << endl;
        cout << "1. Display List of Books.\n" << "2. Find Book.\n" << "3. Add New Book.\n";
        cout << "4. Delete Book.\n"<<"5. Save List to File.\n"<<"6. Load List from File.\n";
        cout << "7. Sort List.\n"<<"8. Exit.\n\n";
        cin >> optionChosen;
        switch(optionChosen)
        {
            case 1:
            {
                for (int i=0;i<MAX_BOOKS;i++)
                {
                    if(books[i].bookTitle!="\0")
                    {
                    cout << "Book Title: " << books[i].bookTitle << endl;
                    cout << "Total Pages: " << books[i].bookPageN << endl;
                    cout << "Book Review: " << books[i].bookReview << endl;
                    cout << "Book Price: " << books[i].bookPrice<< "\n\n" << endl;
                    }
                }
                break;
            }
        case 2:
        {

        }
        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;

        }
        case 4:
        {

        }
        case 5:
        {

        }
        case 6:
        {

        }
        case 7:
        {

        }
        default:
        {
            if(optionChosen!=8)
            {
                cout << "Wrong Input Chosen\n";
                break;
            }
        }

        }



    }
    while(optionChosen<=8);
    return 0;
}

これが私のコードです。2 質問 1. オプションとして数字(a、b、c、abc)ではないものを押すと、プログラムは無限ループ(おそらく)を実行し、停止しません。Q#2. 本を追加するときにスペースを使用すると、コードは同じことを実行し (無限ループを実行する可能性があります)、停止することはありません。ここで何が間違っていますか?

4

2 に答える 2

0

paxdiablo が述べたように、非整数入力はまだ入力ストリームにあります。無効な文字を抽出して破棄するには、cin.ignore() を呼び出す必要があります。

于 2013-02-05T03:01:43.597 に答える
0

最初のものは簡単です。cin >> some_int;入力ストリームに何もない場合int、単に失敗し、入力ストリームを現在の状態のままにします。

つまり、次に別の を取得するために戻ったときに、整数以外の値を読み取る準備ができていることintを意味します。

于 2013-02-05T02:49:28.220 に答える