不讨厌Turbo,我已经讨厌我的学校了!
如果在某个文件(例如年龄或百分比)中输入字符而不是int或float,我希望显示错误消息。 我写了这个函数:
template <class Type>
Type modcin(Type var) {
take_input: //Label
int count = 0;
cin>>var;
if(!cin){
cin.clear();
cin.ignore();
for ( ; count < 1; count++) { //Printed only once
cout<<"\n Invalid input! Try again: ";
}
goto take_input;
}
return var;
}
如何停止多次重复错误消息? 有更好的方法吗?
注意:请确保这是我们正在谈论的TurboC ++,我尝试使用此 question 中的方法,但即使在包含限制之后.h,它没有用。
答案 0 :(得分:1)
这是C ++中的代码片段。
template <class Type>
Type modcin(Type var) {
int i=0;
do{
cin>>var;
int count = 0;
if(!cin) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
for ( ; count < 1; count++) { //Printed only once
cout<<"\n Invalid input! Try again: ";
cin>>var;
}
}
} while (!cin);
return var;
}
这些变量经过量身定制,可与您的变量相匹配。所以你可以更好地理解。这段代码并不完美。
numeric_limits<streamsize>::max()
参数会给出编译器错误(&#39;未定义的符号&#39;错误,对于numeric_limits&amp; streamsize和&#39;原型必须是在Turbo C ++中定义了max())的错误。因此,要使其在Turbo C ++中运行。将numeric_limits<streamsize>::max()
参数替换为一些大的int值,例如100。
这将使缓冲区仅被忽略/清除,直到达到100个字符或者&#39; \ n&#39; (按下/输入按钮/换行符)。
以下代码可以在Turbo C ++或适当的C ++上执行。提供的评论是为了解释功能:
template <class Type> //Data Integrity Maintenance Function
Type modcin(Type var) { //for data types: int, float, double
cin >> var;
if (cin) { //Extracted an int, but it is unknown if more input exists
//---- The following code covers cases: 12sfds** -----//
char c;
if (cin.get(c)) { // Or: cin >> c, depending on how you want to handle whitespace.
cin.putback(c); //More input exists.
if (c != '\n') { // Doesn't work if you use cin >> c above.
cout << "\nType Error!\t Try Again: ";
cin.clear(); //Clears the error state of cin stream
cin.ignore(100, '\n'); //NOTE: Buffer Flushed <|>
var = modcin(var); //Recursive Repeatation
}
}
}
else { //In case, some unexpected operation occurs [Covers cases: abc**]
cout << "\nType Error!\t Try Again: ";
cin.clear(); //Clears the error state of cin stream
cin.ignore(100, '\n'); //NOTE: Buffer Flushed <|>
var = modcin(var);
}
return var;
//NOTE: The '**' represent any values from ASCII. Decimal, characters, numbers, etc.
}