【发布时间】:2015-01-27 17:56:51
【问题描述】:
我有一个程序,我希望输入整数介于 2 和 64 之间,因此我将 scanf 放入 do { ... } while 循环中。这是我最初测试的代码:
int initialBase;
do {
printf("Initial base: ");
scanf("%i", &initialBase);
} while (initialBase < 2 || initialBase > 64);
问题是每当输入不是一个有效的整数时,它只是无限期地输出printf 语句并且不再提示用户输入,立即淹没控制台。为什么会发生这种情况?有什么更好的方式来读取满足我想要的条件的输入?
【问题讨论】:
-
有人愿意评论我为什么被否决吗?
-
这并不奇怪,scanf() 就是这样工作的。
-
嗯,为什么停止提示?
-
因为已经有缓冲数据。 scanf 不会丢弃它,因为它无法被解析。
-
我不是投反对票的人之一,但我怀疑你被投反对票是因为 stackoverflow.com 上有大量帖子描述了使用
scanf进行用户输入的问题。一个常见的建议是不要使用scanf,而是使用getline或类似的东西,然后对字符串进行后解析。