0

我正在尝试获取 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
4

2 回答 2

1

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

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

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

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

于 2019-06-12T08:00:59.750 回答
0

没有格式说明符bool。因为bool它不清楚它应该是什么样子。

有很多可能性:

  • 是/否
  • 是/否
  • 真假
  • 时间/时间
  • 上述任何不同的案例版本
  • 当地人呢?
  • 1/0

与数字及其不同格式不同,上述可能性具有不同的语义。因此,使用单个说明符支持它们是不可取的。

所以如果你想支持它,你必须自己选择和实现它。

于 2019-06-12T08:09:11.263 回答