【发布时间】:2018-01-17 05:04:16
【问题描述】:
此 scanf 语句将从10ss 之类的输入中读取数字为 10 - 我如何重写它以忽略后面跟着其他字符的 int?如果10ss被读取,它应该忽略它并停止for循环。
for (int i = 0; scanf("%d", &val)==1; i++)
【问题讨论】:
-
scanf不适合 bad 输入。它总是只向前看一个字符。当它遇到s时已经太晚了。当然,您可以尝试使用扫描集捕获以下字符(如果它是非空白字符)并检查返回值,但我建议您查看无数重复项,了解如何确保字符串仅使用strtol的整数。 -
使用
getchar()读取有问题的非数字,然后再次尝试scanf("%d", &val)==1。 -
@chux 你将如何在 for 循环中使用 getchar()?
-
阅读scanf的文档。
-
"123 456"或"123-456"这样的输入会发生什么?