c++ - scanf 读取错误,因为使用 %d 读取 bool
问题描述
#include <cstdio>
int main() {
int a;
bool b;
scanf("%d %d",&a, &b);
printf("%d %d\n", a, b);
}
当我输入 123 和 1,然后程序输出 0 和 1。
你能告诉我为什么会发生这种情况以及 scanf 是如何工作的吗?
解决方案
当您使用 时&b
,您将错误的指针类型传递给函数。之后,程序会受到未定义行为的影响。
之后不要试图理解程序。这样做是没有意义的。在您的程序执行导致未定义行为的代码后,任何事情都可能发生。
仅供参考。scanf
不支持将格式说明符读入类型的对象bool
。您可以将值 0 和 1 读入类型变量,int
或者short
然后bool
适当地分配给类型变量。
int a;
bool b;
int dummy;
scanf("%d %d", &a, &dummy);
b = (dummy == 1);
更好的是,将流提取运算符与std::cin
.
int a;
bool b;
std::cin >> a >> b;
推荐阅读
- javascript - 将敏感逻辑移出浏览器
- python - 如何在 django 的用户模型中将“移动”字段添加到默认 auth_user 表?
- networking - 分布式系统中的 P2P 和客户端-服务器架构模型有什么区别
- tableau-api - Tableau 根据从另一个属性中排除的值过滤另一个属性数据
- javascript - Angularjs问题:无法解析变量,但变量存在
- spring-restcontroller - 为 SpringBoot 设计 REST API 的正确方法是什么
- java - 当recyclerview的itemview进入屏幕区域时如何更新firebase中的子值?
- javascript - 如何计算从 12am 到 12am 的日期之间的差异?
- c# - 以 VBA 形式显示 C# 生成的位图
- javascript - 为什么在使用 Async await 和 mongodb 时 Api 响应很慢