[英]Why is scanf working abnormally for bool input in C?
我正在尝试获取3个布尔变量和1个int变量的输入。 即使我输入正确,它也不是正确的。
我正在使用%d
作为stdbool.h
bool
格式说明符,如@taufique 在scanf中的format说明符中对C中的bool数据类型建议的那样
这是我的代码及其行为:
#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的同一Format说明符中为C中的bool数据类型获取输入时,它可以正常工作。
那么为什么scanf行为不正确?
PS:对于某些输入,它确实可以正常工作:
0 0 1 26
0 0 1 26
没有用于bool
格式说明符,拥有一个格式说明没有多大意义。 用户将输入什么"true"
? 除int
不能将%d
用作任何其他类型。
如果出于某种原因需要从stdin接受布尔输入,请使用int
值1
或0
,然后再将其转换为bool
。 例如:
int living;
scanf("%d", &living);
bool is_living = living;
从int
到bool
转换将自动将任何非零值转换为true
并将零值转换为false
。
没有bool
格式说明符。 因为对于bool
,尚不清楚其外观。
有很多可能性:
与数字及其不同格式不同,上述可能性具有不同的语义。 因此,用单个说明符支持它们都是不可取的。
因此,如果要支持它,则必须自己选择并实施。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.