C ++函数从键盘

时间:2018-06-11 05:25:33

标签: c++

我正在尝试在C ++中编写一个函数(leggiInteroEstrIncl),它提示用户键盘输入包含在给定范围内的整数(minimomassimo之间)

以下是我编写的函数,然后在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” ,这个软件进入一种循环,并不会停止要求用户再次输入。

你能告诉我它有什么问题吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用std::string获取输入:

string insertio;
cin >> inserito;

然后使用以下功能之一:

http://en.cppreference.com/w/cpp/string/basic_string/stol

如果字符串中没有数字,则抛出正确的异常。

如果您需要查看更多解决方案,请查看以下解决方案:

How to determine if a string is a number with C++?

答案 1 :(得分:1)

这个

cin >> numInserito;

试图读取一个数字,而不是其他任何内容 正如您所观察到的那样,它将成功地使用一个数字 如果使用非数字,它将失败,但不会触发捕获部分。
它只是不会读取任何内容,特别是它会在输入流中留下非数字 如果您继续尝试读取数字,它将继续失败 当读取数字失败时,您需要阅读任何内容并且可能忽略它 为了忽略非数字,请将其作为字符串读取并对其执行任何操作 (如BartekPL的回答所述):

string insertio;
cin >> inserito;