c - 为什么scanf在C中的布尔输入工作异常?
问题描述
我正在尝试获取 3 个 bool 变量和 1 个 int 变量的输入。即使我正确输入,它的行为也不正确。
我正在使用@taufique在scanf中的格式说明符中为C中的bool数据类型建议的%d
格式bool
说明符stdbool.h
这是我的代码及其行为:
#include <stdio.h>
#include <stdbool.h>
int main( )
{
bool health,sex,living;
int age;
scanf("%d%d%d%d",&sex,&health,&living,&age);
printf("\n%d %d %d %d\n",sex,health,living,age);
}
安慰:
0 1 0 25
0 0 0 25
对于其他一些输入:
1 0 0 26
0 0 0 26
但是,当使用临时整数变量按照@ouah 在scanf 中的相同格式说明符中为 C 中的 bool 数据类型建议的输入时,它可以正常工作。
那么为什么 scanf 行为不正常呢?
PS:对于某些输入,它确实可以正常工作:
0 0 1 26
0 0 1 26
解决方案
没有格式说明符bool
,拥有一个没有多大意义。用户会输入什么,"true"
?您不能%d
用于除int
.
如果您出于某种原因需要从标准输入获取布尔输入,请使用int
values1
或0
,然后将其转换为bool
以后。例如:
int living;
scanf("%d", &living);
bool is_living = living;
从int
to 的转换bool
将自动将任何非零值转换为 ,true
并将零转换为false
。
推荐阅读
- python - Discord.py“位置参数跟随关键字参数”错误
- sql - 如何记录临时值?
- opencv - Opencv 图像有时间戳信息吗?
- c# - 我有多个 TcpClient 连接,如何选择一个特定的?
- php - 试图在我的网站上有一个联系表格,使用 HTML 给我发电子邮件
- python - 有没有办法在 Python 中组合多个列表推导?
- asp.net-core - razor 文件是否支持“Shift_JIS”编码?
- php - Woocommerce - 在 Shipstation 中将自定义数据作为行项目发送
- javascript - JS中相同变量的多个条件
- python - Pandas 数据框列“只能使用具有 datetimelike 值的 .dt 访问器”