我正在尝试获取3个布尔变量和1个int变量的输入。即使我输入正确,也表现不正确。
我正在使用%d
作为bool
中stdbool.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
答案 0 :(得分:1)
bool
没有格式说明符,而使用格式符没有多大意义。用户将输入什么类型"true"
?除%d
以外,其他任何类型都不能使用int
。
如果出于某种原因需要从stdin中获取布尔值输入,请使用int
值1
或0
,然后再将其转换为bool
。例如:
int living;
scanf("%d", &living);
bool is_living = living;
从int
到bool
的转换将自动将任何非零值转换为true
,将零转换为false
。
答案 1 :(得分:0)
bool
没有格式说明符。
因为对于bool
,尚不清楚其外观。
有很多可能性:
与数字及其不同格式不同,上述可能性具有不同的语义。因此,不希望使用单个说明符来支持它们。
因此,如果要支持它,则必须自己选择并实施。