📜  scanf boolean (1)

📅  最后修改于: 2023-12-03 15:34:51.369000             🧑  作者: Mango

主题:使用 scanf 读取布尔值

在 C 语言中,scanf 是一个非常常用的函数,用于从输入流中读取数据。对于布尔值(即 truefalse),scanf 的用法可能会让一些程序员感到困惑。本文将介绍如何正确使用 scanf 读取布尔值,并提供一些示例代码。

读取布尔值

在 C 语言中,布尔值通常用整型表示,其中 0 表示 false,非零值表示 true。因此,在读取布尔值时,可以使用 %d 格式字符串读取整数,并使用一个整型的变量存储结果。例如:

#include <stdio.h>

int main(void) {
  int b_val;
  printf("Enter a boolean value (0 or 1): ");
  scanf("%d", &b_val);
  if (b_val) {
    printf("You entered true.\n");
  } else {
    printf("You entered false.\n");
  }
  return 0;
}

在上面的代码中,scanf 使用 %d 格式字符串读取整数,并将结果存储在 b_val 变量中。然后,程序将根据 b_val 变量的值输出相应的结果。

注意,在上面的示例代码中,if (b_val) 的作用是检查 b_val 是否为非零值,如果是,则表示用户输入的是 true。如果用户输入的是 false,则 b_val 将为 0,此时 if 语句的结果为假,程序将输出 “You entered false.”。

读取字符串并转换为布尔值

在某些情况下,用户可能更倾向于输入字符串值而不是整数值。例如,用户可以输入字符串 "true" 或 "false",而不是整数值 1 或 0。在这种情况下,程序员可以读取字符串值并将其转换为布尔值。

为了将字符串转换为布尔值,可以使用 strcmp 函数将字符串与 “true” 进行比较,并将结果存储在布尔类型的变量中。例如:

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

int main(void) {
  char input[16];
  printf("Enter a boolean value (true or false): ");
  scanf("%s", input);
  int b_val = strcmp(input, "true") == 0;
  if (b_val) {
    printf("You entered true.\n");
  } else {
    printf("You entered false.\n");
  }
  return 0;
}

在上面的代码中,scanf 使用 %s 格式字符串读取输入字符串,将其存储在 input 数组中。使用 strcmp 函数比较 input 和 "true" 是否相等,并将结果存储在 b_val 变量中。

总结

在 C 语言中,可以使用 scanf 函数读取布尔值。如果用户输入的是整数,可以使用整型变量存储结果,并检查变量是否为非零值以确定用户输入的是 true 还是 false。如果用户更愿意输入字符串,可以读取字符串并将其转换为布尔值,例如,使用 strcmp 函数将字符串与 “true” 进行比较,并将结果存储在布尔类型的变量中。