此问题在此处已有答案:
Infinite loop with cin when typing string while a number is expected(4个答案)
2天前关闭。
试图创建一个菜单,但使其只接受整数来选择选项,并在用户输入字母时返回。
AppUI.cpp
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <unistd.h>
#include <stdio.h>
using namespace std;
void AppUI::SearchBook()
{
system("CLS");
TitleHeader();
setTxtColor(10);
PageTitle("Search Book");
cout << "Search books by:" << endl;
cout << "1. Title" << endl;
cout << "2. Author" << endl;
cout << "3. Publication Date" << endl;
cout << "4. Publisher" << endl;
cout << "\n0. Go back to main menu" << endl;
}
EditBook.cpp
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <string>
#include <cstring>
#include <algorithm>
#include <unistd.h>
#include <stdio.h>
using namespace std;
void EditBook::SearchBook()
{
//variable declarations
int Opt;
char searchTxt[255];
SearchStart:
UI.SearchBook();
cout << "\nOption: ";
cin >> Opt;
switch(Opt)
{
case 0:
UI.MainMenu();
break;
case 1:
system("CLS");
cout << "Enter title: ";
cin.getline(searchTxt,sizeof(searchTxt));
SearchByTitle(searchTxt);
break;
case 2:
system("CLS");
cout << "Enter author name: ";
cin.getline(searchTxt,sizeof(searchTxt));
SearchByAuthor(searchTxt);
break;
case 3:
system("CLS");
cout << "Enter publication date: ";
cin.getline(searchTxt,sizeof(searchTxt));
SearchByPubDate(searchTxt);
break;
case 4:
system("CLS");
cout << "Enter publisher: ";
cin.getline(searchTxt,sizeof(searchTxt));
SearchByPublisher(searchTxt);
break;
default:
cout << "Invalid option!";
sleep(1);
goto SearchStart;
break;
}
}
在搜索书中,当我输入一个选项中没有的数字,比如“5”,它会循环回来,让我输入正确的选项。但是当我输入一个字母,比如“a”,它会循环回来,让它一遍又一遍地显示“无效选项”,不让我输入新的选项。我希望当我输入一个字母,这是一个无效选项,它仍然会返回并让我输入正确的一个,这是一个数字/整数。
2条答案
按热度按时间t5fffqht1#
您希望“当用户输入字母时循环返回”。
因此,您希望允许用户输入字母,以便检测并对其做出React。为此,您需要接受多于
int
的输入;而int Opt;
和cin >> Opt;
则没有。您需要既可以是整数又可以是字符的对象。
例如,字符串。然后解释它,并仅在它可以用作整数时用作整数。
neskvpey2#
按照现有的代码,你需要
当然我不能推荐使用
goto
,写一个合适的循环。我不想敲我自己的答案,但最好的解决方案是Yunnosch的,但也许这是一个有点困难的代码为初学者。