1

如果用户输入的是整数而不是字符或字符串,我需要检查我的程序。字符并不是那么糟糕,因为它实际上是一个整数,但是如果用户输入一个字符序列,那么它就会发疯。

我做了这个功能

int* ask_lung(int* lung)
{
int tmp; // length of a word

cout << "Inserisci la lunghezza della parola da indovinare: ";
cin >> tmp;

if(cin)
{
    // Se i è uguale a o minore di 0 allora ritorna all'inizio

    if(tmp <= 0)
    {
        cout << endl << "\tNon puoi inserire 0." << endl << endl;
        ask_lung(lung);
    }
    else
    {
                    // the error is about here, when it reaches this part of the code it keeps showing the first line "Inserisci la lunghezza della parola da indovinare: "
        *lung = tmp;
    }
}
else ask_lung(lung);

return lung;
}
4

3 回答 3

2

如果是字符串,您的流包含大量无效字符,您需要将这些字符的流刷新到新状态。与其递归地这样做,不如在循环中这样做。这对你来说就足够了。

while(true)
{
  cout << "Please Enter an Integer" << endl ;
  if (cin >> temp)  //true if a leading integer has entered the stream
    break ;
  else
  {
    cout << "Invalid Input" << endl ;
    cin.clear() ;
    cin.ignore(std::numeric_limits<streamsize> :: max(), '\n') ;
  }
}
于 2012-11-30T14:54:33.943 回答
1

您可以std::all_ofstd::isdigitas 一起使用:

std::string input;
std::cin >> input;

if ( std::all_of(input.begin(), input.end(), std::isdigit) )
{
     //input is integer
}

或者,如果您想测试并且还想要整数,那么最好使用inputas int,正如其他答案所建议的那样。std::stoi如果您已经(阅读)了该字符串,则可以考虑使用。请注意,错误时std::stoi会引发异常。

于 2012-11-30T15:05:47.297 回答
-2

输入被正确处理,问题是您正在返回一个指向局部变量的指针。该变量在堆栈上,一旦函数返回,它将被释放。相反,您应该只返回整数本身,而不是指向它的指针。

编辑:我看到实际上您并没有返回指向整数的指针,而是分配给指针指向的整数。不过,最好只返回整数本身。

于 2012-11-30T14:56:02.237 回答