[英]Why does the compiler executes an infinite loop upon having space as a Character?
#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。 當我添加一本書時,如果我使用空間,那么代碼會做同樣的事情(執行可能的無限循環)並且永遠不會停止。 我在這里做錯了什么?
第一個很簡單。 當您cin >> some_int;
並且輸入流中沒有int
,它只是失敗而使輸入流保持其當前狀態。
這意味着下次您返回另一個int
,它將仍然可以讀取非整數。
如paxdiablo所述,非整數輸入仍在輸入流中。 您需要調用cin.ignore()來提取和丟棄無效字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.