Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试验证C+;中要加倍的有效输入时出现循环错误+;_C++_While Loop_Scanf - Fatal编程技术网

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……另一方面,我们的说明是“假设用户将输入一个数字”这对我来说都是受虐狂的行为;)谢谢你的帮助!