C 一行中由空格分隔的2个浮点的错误句柄

C 一行中由空格分隔的2个浮点的错误句柄,c,C,这是我第一次尝试,但没有成功 如果我故意输入错误的输入值,它将转到INF循环,例如:asdas dfsad afdas float a,b ; while (1){ if(scanf("%f %f",&a,&b) == 2) { break; } printf("Error, try again:"); } 避免此类问题的最佳方法是使用fgets()一次读取整行,然后使用sscanf()解析它(或者在您的情况下,可能是strod())。这

这是我第一次尝试,但没有成功

如果我故意输入错误的输入值,它将转到INF循环,例如:asdas dfsad afdas

float a,b ;
while (1){
    if(scanf("%f %f",&a,&b) == 2) {
        break;
    }
    printf("Error, try again:");
}

避免此类问题的最佳方法是使用
fgets()
一次读取整行,然后使用
sscanf()
解析它(或者在您的情况下,可能是
strod()
)。这不仅可以避免您现在遇到的特定问题,还可以避免在输入格式不符合预期时出现其他类型的问题。

避免此类问题的最佳方法是使用
fgets()
一次读取整行,然后使用
sscanf()
(或者在您的情况下,可能是
strod()
)对其进行解析。这不仅可以避免您现在遇到的特定问题,还可以避免在输入格式不符合预期时出现其他类型的问题。

由于
scanf()
等不关心行,因此如果您关心行,则使用这些函数是错误的。使用行读取函数(or)读取输入,然后使用
sscanf()
解析该行。它不关心新词,但你知道它只有一句话可玩。此外,如果第一次解析失败,您可以重新解析该行;您还可以在错误消息中报告完整的行,这可以使调试更容易。由于
scanf()
等不关心行,因此如果您关心行,则它们是错误的函数。使用行读取函数(or)读取输入,然后使用
sscanf()
解析该行。它不关心新词,但你知道它只有一句话可玩。此外,如果第一次解析失败,您可以重新解析该行;您还可以在错误消息中报告完整的行,这可以使调试更容易。