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)的选项时,程序会执行无限循环(可能)并且不会停止。问#2。当我添加一本书时,如果我使用空间,代码会做同样的事情(执行可能的无限循环)并且永远不会停止。我在这里做错了什么?

4

2 回答 2

0

第一个很容易。当您输入流中cin >> some_int;没有任何int内容时,它只会失败并将输入流保持在当前状态。

这意味着下次您返回获取另一个int时,它仍将准备好读取非整数。

于 2013-02-05T02:49:28.220 回答
0

正如 paxdiablo 所提到的,非整数输入仍在输入流中。您需要调用 cin.ignore() 来提取和丢弃无效字符。

于 2013-02-05T03:01:43.597 回答