c - “~scanf”是什么意思?
问题描述
我在这样的代码中看到了它
while(~scanf("%d",&a))
我知道scanf()
有返回值,但我不明白是什么~
意思
解决方案
这是一个愚蠢的技巧,它依赖于EOF
设置所有位。由于标准不保证 EOF 的确切值,因此该程序的行为取决于平台。
当scanf
检测到输入结束时,它返回EOF
. 标准要求EOF
为负数。很多时候EOF
设置为-1
。当~
应用于 时-1
,您将返回零,因此循环停止。在EOF
定义为其他负数的平台上,循环永远不会停止。代码的行为还取决于~
带有符号值的实现定义的行为。
您应该按如下方式重写循环:
while (scanf("%d", &a) != EOF) {
...
}
推荐阅读
- python - django 管理数据未在数据库中注册
- spring - Spring Boot数据sql镜像文件
- nuxt.js - 在页面刷新时,在 SSR 模式下使用 Nuxt 时,我们应该在哪里调用获取令牌或用户详细信息 API?
- postgresql - 使用 Knex 在一个语句中更新多行
- c# - 使用 .Net Core 3.1 Razor Pages 应用程序访问类中的会话
- excel - 通过在多张纸上打印区域
- node.js - 将一个简单的 React 表单应用程序添加到现有的 Nodejs docker 映像中
- php - 试图理解我的 Apache 错误日志中的 php 警告
- excel - VBA 用户表单 (Excel) 的字体和大小相同,但以不同的大小显示
- go - 使用 go 解析简单的 terraform 文件