c - “~scanf” 是什么意思?

标签 c

我在这样的代码中看到的

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

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

最佳答案

这是一个依赖 EOF 设置所有位的愚蠢技巧。 Since the standard does not guarantee the exact value of EOF , 这个程序的行为是平台相关的。

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

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

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

关于c - “~scanf” 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50997531/

相关文章:

c - #include <文件名> 和 #include "filename"之间的区别

c - 当没有一次性发送完整消息时,在套接字上使用 send() 的正确方法是什么?

c - EOF 上的段错误 while 在 c 中循环

c - 带有注释(编译指示)的仪器 C 代码用于性能跟踪

c - 不确定我的编译错误 : control reaches end of non-void function

c - 在cuda中,加载到共享内存比加载到寄存器慢

c - 如何在c中打印长十进制数?

c - 数组参数指针错误?

iphone - 使用 OpenGL ES 2.0 显示/处理 iPhone 相机帧

c++ - 从另一个非进程和日志堆栈发送信号到线程没有发生