如果用户输入的是整数而不是字符或字符串,我需要检查我的程序。 字符并不是那么糟糕,因为它是一个实际的整数,但如果用户输入一系列字符,那么它就会变得疯狂。
我已经完成了这个功能
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;
}
答案 0 :(得分: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') ;
}
}
答案 1 :(得分:1)
您可以将std::all_of
与std::isdigit
一起使用:
std::string input;
std::cin >> input;
if ( std::all_of(input.begin(), input.end(), std::isdigit) )
{
//input is integer
}
或者,如果您想测试并且也想要整数,那么最好将input
用作int
,如其他答案所示。如果您已经(读取)了字符串,则可以考虑使用std::stoi
。请注意,std::stoi
会在出错时抛出异常。
答案 2 :(得分:-2)
正确处理输入,问题是您正在返回指向局部变量的指针。该变量位于堆栈上,一旦函数返回,它将被释放。相反,你应该只返回整数本身,而不是指向它的指针。
编辑:我看到实际上你没有返回指向整数的指针,你正在指定指针所指向的整数。不过,最好只返回整数本身。