C++ 尝试验证C+;中要加倍的有效输入时出现循环错误+;
我试图验证双变量的字符输入是否为正确的数据类型C++ 尝试验证C+;中要加倍的有效输入时出现循环错误+;,c++,while-loop,scanf,C++,While Loop,Scanf,我试图验证双变量的字符输入是否为正确的数据类型 double number = 0; int validCheck = 0; char another = 'y'; while(another == 'y') { cout<<"Please enter a number: "; validCheck = scanf("%lf", &number); while (validCheck !=1) { cout<<"
double number = 0;
int validCheck = 0;
char another = 'y';
while(another == 'y')
{
cout<<"Please enter a number: ";
validCheck = scanf("%lf", &number);
while (validCheck !=1)
{
cout<<"Invalid input, please enter a number: ";
validCheck = scanf("%lf", &number);
}
double number=0;
int validCheck=0;
char-other='y';
而(另一个=='y')
{
cout无效输入保留在输入缓冲区中,因此scanf
始终显示相同的错误输入。您需要清除输入缓冲区,例如
int c;
do {
c = getchar();
}while(c != '\n' && c != EOF);
在while()之后尝试以下插入:fflush(stdin)这是一个真正的C问题。一些CUT语句不允许C++。FAUNVD是正确的,你必须刷新输入。@ FasunVD——在STDIN上做FFLUW是不确定的。作为解决方案提供的是可怕的建议。请参见C FAQ的1226A。我想了一下,看看你在做什么……我想。这设置了一个整数C,它从B中拉出。uffer直到缓冲区是新行或文件结尾?对。它的目的是清空缓冲区,因为终端在输入新行后将输入发送到进程,如果找到一行,清空循环将停止。c
必须是Int
而不是char
,才能测试EOF
。当然,如果EOF
条件实际遇到时,您无法再从stdin
读取任何内容,因此您应该退出(退出失败)
或者一些不被困在无限循环中的东西。效果很好,现在我明白了,我可以使用它。不过……通过与我的导师交谈,我认为我最好使用字符串并检查它是否为int……另一方面,我们的说明是“假设用户将输入一个数字”这对我来说都是受虐狂的行为;)谢谢你的帮助!