我正在尝试在C ++中编写一个函数(leggiInteroEstrIncl
),它提示用户键盘输入包含在给定范围内的整数(minimo
和massimo
之间)
以下是我编写的函数,然后在main()
中调用它来调用它:
#include <iostream>
using namespace std;
int leggiInteroEstrIncl(string stringaDaStampare, int minimo, int massimo) {
int numInserito = 0;
bool errore = false;
do {
errore = false;
cout << stringaDaStampare << " (un numero intero compreso tra " << minimo
<< " e " << massimo << " estremi inclusi): ";
try {
cin >> numInserito;
} catch (...) {
errore = true;
cout << "Hai inserito un numero non valido, prova ancora" << endl;
}
if (errore == false && (numInserito < minimo || numInserito > massimo)) {
errore = true;
cout << "Hai inserito un numero al di fuori dell'intervallo richiesto: "
<< minimo << " <-> " << massimo << endl;
}
} while (errore);
return numInserito;
}
int main() {
int number = 0;
number = leggiInteroEstrIncl(
"Inserire la cifra in Yen da ripartire in banconote e monete", 1, 30000);
system("pause");
return 0;
}
如果我键入一个未包含在指定范围内的有效整数,则此软件会起作用并要求用户再次键入,但如果我键入的内容不是数字,例如单词“hello” ,这个软件进入一种循环,并不会停止要求用户再次输入。
你能告诉我它有什么问题吗?
谢谢
答案 0 :(得分:1)
您可以使用std::string
获取输入:
string insertio;
cin >> inserito;
然后使用以下功能之一:
http://en.cppreference.com/w/cpp/string/basic_string/stol
如果字符串中没有数字,则抛出正确的异常。
如果您需要查看更多解决方案,请查看以下解决方案:
答案 1 :(得分:1)
这个
cin >> numInserito;
试图读取一个数字,而不是其他任何内容
正如您所观察到的那样,它将成功地使用一个数字
如果使用非数字,它将失败,但不会触发捕获部分。
它只是不会读取任何内容,特别是它会在输入流中留下非数字
如果您继续尝试读取数字,它将继续失败
当读取数字失败时,您需要阅读任何内容并且可能忽略它
为了忽略非数字,请将其作为字符串读取并对其执行任何操作
(如BartekPL的回答所述):
string insertio;
cin >> inserito;