C 语言 - 输入验证

输入验证

当用户在 C 程序中输入数据时,他们可能会输入一些意外的内容。输入验证确保在程序继续运行之前输入是正确的。

如果没有验证,您的程序可能会崩溃或给出错误的结果!

下面的示例展示了在 C 语言中检查用户输入是否有效的一些简单方法。

验证数字范围

检查数字是否在允许的范围内(例如,1 到 5):

实例

#include <stdio.h>

int main() {
  int number; // 用于存储用户数字的变量

  do {
    printf("Choose a number between 1 and 5: ");
    scanf("%d", &number); // 读取数字输入
    while (getchar() != '\n'); // 清除输入缓冲区中剩余字符
  } while (number < 1 || number > 5); // 持续询问,直到数字在 1 和 5 之间

  printf("You chose: %d\n", number); // 打印有效的数字
  return 0;
}

示例结果:

Choose a number between 1 and 5: 8
Choose a number between 1 and 5: -2
Choose a number between 1 and 5: 4
You chose: 4

验证文本输入

检查名称是否为空。使用 fgets() 并检查第一个字符:

实例

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

int main() {
  char name[100]; // 用于存储用户姓名的缓冲区

  do {
    printf("Enter your name: ");
    fgets(name, sizeof(name), stdin); // 将输入作为字符串读取
    name[strcspn(name, "\n")] = 0; // 如果存在换行符,则将其移除
  } while (strlen(name) == 0); // 如果输入为空,则重复

  printf("Hello, %s\n", name); // 向用户打招呼
  return 0;
}
Example

结果:

Enter your name:
Enter your name:
Enter your name: John
Hello, John

验证整数输入

确保用户输入的是数字。如果他们输入了其他内容(如字母),则使用 fgets()sscanf() 再次询问:

实例

#include <stdio.h>

int main() {
  int number;       // 用于存储用户数字的变量
  char input[100];  // 用于保存用户输入字符串的缓冲区

  printf("Enter a number: ");

  // 持续读取输入,直到用户输入有效的整数
  while (fgets(input, sizeof(input), stdin)) {
    // 尝试从输入字符串中读取一个整数
    if (sscanf(input, "%d", &number) == 1) {
      break; // 成功:跳出循环
    } else {
      printf("Invalid input. Try again: "); // 如果不是整数,再次询问
    }
  }

  // 打印用户输入的有效数字
  printf("You entered: %d\n", number);
  return 0;
}

示例结果:

Enter a number: AB
Invalid input. Try again: 3.5
Invalid input. Try again: 35
You entered: 35

提示:您可以在我们的 <stdio.h> 库参考中阅读更多关于 fgets()sscanf() 的信息。