gpt4 book ai didi

c - 为什么在 C 语言中 scanf 对于 bool 输入工作异常?

转载 作者:行者123 更新时间:2023-11-30 14:38:31 25 4
gpt4 key购买 nike

我正在尝试获取 3 个 bool 变量和 1 个 int 变量的输入。即使我正确输入,它的行为也不正确。

我正在使用 %d 作为 stdbool.hbool 的格式说明符,正如 @taufique 在 Format specifier in scanf for bool datatype in C 中所建议的那样。

这是我的代码及其行为:

#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 在同一个 Format specifier in scanf for bool datatype in C 中所建议的那样,效果很好。

那么为什么 scanf 行为不正确?

<小时/>

PS:对于某些输入它确实可以正常工作:

0 0 1 26
0 0 1 26

最佳答案

bool 没有格式说明符,拥有它没有多大意义。用户会输入什么“true”?您不能将 %d 用于除 int 之外的任何其他类型。

如果您出于某种原因需要从 stdin 获取 bool 输入,请使用 int10,然后将其转换为 bool 稍后。例如:

int living; 
scanf("%d", &living);
bool is_living = living;

intbool 的转换会自动将任何非零值转换为 true,将零转换为 false .

关于c - 为什么在 C 语言中 scanf 对于 bool 输入工作异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com