繁体   English   中英

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

[英]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接受布尔输入,请使用int10 ,然后再将其转换为bool 例如:

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

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

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

有很多可能性:

  • 是/否
  • Y / N
  • 真假
  • T / F
  • 上述的任何不同情况下的版本
  • 那当地人呢?
  • 1/0

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM