为什么scanf对于C中的bool输入异常工作?

时间:2019-06-12 07:29:46

标签: c scanf stdbool

我正在尝试获取3个布尔变量和1个int变量的输入。即使我输入正确,也表现不正确。

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

这是我的代码及其行为:

#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

2 个答案:

答案 0 :(得分:1)

bool没有格式说明符,而使用格式符没有多大意义。用户将输入什么类型"true"?除%d以外,其他任何类型都不能使用int

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

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

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

答案 1 :(得分:0)

bool没有格式说明符。 因为对于bool,尚不清楚其外观。

有很多可能性:

  • 是/否
  • y / n
  • 对/错
  • t / f
  • 上述任何其他大小写版本
  • 当地人呢?
  • 1/0

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

因此,如果要支持它,则必须自己选择并实施。