【发布时间】:2017-06-09 02:31:43
【问题描述】:
已解决“输入正确值后循环后错过返回”
我使用 scanf_s 从控制台获取输入。我写了一个函数来检查输入,如果错误,它会请求再次输入。
如果我第一次输入正确的值,一切都很好。如果我必须在函数内再次输入该值,一切都很好,但返回该值的函数返回 NaN。为什么只有两次使用 scanf_s 才会返回双精度值?
如果我调用 input 并输入正确的值,则返回 double。如果我输入一个小于或等于 0 的值,我必须再次输入该值,但这次返回 NaN。在调试时我可以看到 eingabe 仍然是一个 double。
double input() {
int n = -1;
double eingabe = 0.0;
scanf_s("%lf", &eingabe);
clearBuffer();
if (eingabe <= 0.0)
{
do
{
printf("Invald input");
printf("Try again: ");
n = scanf_s("%lf", eingabe);
clearBuffer();
} while (eingabe <= 0.0);
}
else
{
return eingabe;
}
}
void clearBuffer() {
//alles aus dem Buffer lesen bis man bei EOF (END OF FILE) ankommt
int c;
while ((c = getchar()) != EOF) {
if (c == '\n')
break;
}
}
【问题讨论】:
-
如果你编译为 C++,为什么不用
std::cin代替scanf_s,用std::cout代替printf? -
你的调试器告诉你发生了什么?您是否看到它按预期到达了您的退货声明?
-
跟进 - 你的编译器是否给你任何关于你的 input() 函数的警告?
-
为什么忽略
scanf_s的返回值? I/O 意味着与环境交互,您无法控制,因此您必须始终检查所有内容。 -
您对
scanf_s的第二次调用使用eingabe而不是&eingabe!虽然您的代码作为一个整体有一些很好的答案,但这可能就是除了第一次尝试之外返回 NaN 的原因。