首页 > 解决方案 > “~scanf”是什么意思?

问题描述

我在这样的代码中看到了它

while(~scanf("%d",&a))

我知道scanf()有返回值,但我不明白是什么~意思

标签: c

解决方案


这是一个愚蠢的技巧,它依赖于EOF设置所有位。由于标准不保证 EOF 的确切值,因此该程序的行为取决于平台。

scanf检测到输入结束时,它返回EOF. 标准要求EOF为负数。很多时候EOF设置为-1。当~应用于 时-1,您将返回零,因此循环停止。在EOF定义为其他负数的平台上,循环永远不会停止。代码的行为还取决于~带有符号值的实现定义的行为。

您应该按如下方式重写循环:

while (scanf("%d", &a) != EOF) {
    ...
}

推荐阅读