C语言中scanf的布尔数据类型格式说明符

25

我在使用C std99中定义在<stdbool.h>头文件中的bool数据类型。现在我想要用户提供输入。我需要在scanf中使用什么格式说明符来从用户输入一个字节大小的布尔值,然后在我的程序中进行操作。

您可以使用"%d"格式说明符来读取用户输入的整数值并将其存储在bool变量中。由于bool类型具有1字节大小,因此可以使用以下代码:

bool myBool; scanf("%d", &myBool);

注意:scanf() 不安全。考虑使用例如 strtoXXX() 函数。 - reichhart
3个回答

33

没有。

使用临时对象,因为 _Bool 的大小依赖于实现。

#include <stdbool.h>
#include <stdio.h>

bool b;
int temp;

scanf("%d", &temp);
b = temp;

1

你实际上的问题不是关于bool的说明符,因为在人类语言中没有"bools"(这可能是你的输入)。人类语言知道字符、数字和更多内容。对于这些,我们有格式说明符。

实际问题是你的布尔值如何显示在你的输入中:

  • 是1还是0?
  • TRUE还是false?
  • yEs还是nO?

根据你的输入,你需要选择一个匹配的格式说明符。然后区分两个布尔值。

以下是10作为布尔表示在你的输入中的示例:

bool b;
int i;
printf("1/0:\n");
scanf("%d", &i);
if (i) {
  b = 1;
} else {
  b = 0;
}

如果输入为2,它将被视为1。因此,如果您想进行严格的实现,则需要进行错误检查/处理,以确保输入中只有10

免责声明:scanf() 不安全且存在安全漏洞,请勿使用!这个示例只是一个演示如何将输入转换为布尔值的方法。


-1

没有直接从用户那里获取布尔值输入的方法。但是,我们可以使用临时变量和if-else if语句来从用户那里获取输入,并将其存储为布尔值。

  • 为此,我们必须使用 <string.h> 及其内置函数 strcmp

以下是具体步骤:

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

int main() {
    bool x;
    int temp;
    char y[5];

    printf("Enter Boolean Input True or False: - \n");
    scanf("%s", &y);

    if(strcmp(y, "True") == 0){
        temp = 1;
    }

    else if(strcmp(y, "False") == 0){
        temp = 0;
    }

    x = temp;

    printf("%d", x);

    return 0;
}

你可以在这张图片中看到输出结果

1


破碎的代码。可能会出现在没有值的情况下使用temp的情况。每个现代编译器都应该显示警告。实际上,使用两个if语句是错误的。布尔值(无三态)只能有两个值。因此,只需要一个if来区分两个值。第二个if在逻辑上是多余的。 - reichhart
此外,您的变量 temp 是不必要的。直接将 x 赋值即可。 - reichhart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接