首页 > 解决方案 > 为什么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

标签: cscanfstdbool

解决方案


没有格式说明符bool,拥有一个没有多大意义。用户会输入什么,"true"?您不能%d用于除int.

如果您出于某种原因需要从标准输入获取布尔输入,请使用intvalues10,然后将其转换为bool以后。例如:

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

intto 的转换bool将自动将任何非零值转换为 ,true并将零转换为false


推荐阅读