1、使用 scanf 判断输入是否为整数
#include <stdio.h> int main() { int num; printf("请输入一个整数:"); if (scanf("%d", &num) == 1) { printf("你输入的是一个整数:%d\n", num); } else { printf("输入的不是一个整数。\n"); } return 0; }
2、用 fgets + sscanf 严格判断
通过使用fgets + sscanf
, 可以可以防止输入 "123abc"
这种情况误判为整数。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int is_valid_integer(const char *str) { int i = 0; // 跳过前导空格 while (isspace(str[i])) i++; // 处理负号或正号 if (str[i] == '-' || str[i] == '+') i++; // 必须至少有一个数字 if (!isdigit(str[i])) return 0; // 检查剩下的是否全是数字 while (isdigit(str[i])) i++; // 跳过末尾空格 while (isspace(str[i])) i++; // 字符串结束时 i 应该指向 '\0' return str[i] == '\0'; } int main() { char input[100]; printf("请输入一个整数:"); fgets(input, sizeof(input), stdin); // 去掉末尾换行符 input[strcspn(input, "\n")] = 0; if (is_valid_integer(input)) { int num = atoi(input); printf("你输入的是一个整数:%d\n", num); } else { printf("输入的不是一个有效整数。\n"); } return 0; }
3、菜单选择输入验证
用户需要输入一个整数来选择菜单项。如果用户输入非整数,需要提示重新输入,防止程序崩溃或逻辑异常。
#include <stdio.h> int main() { int choice; while (1) { printf("菜单:\n"); printf("1. 添加数据\n"); printf("2. 删除数据\n"); printf("3. 查询数据\n"); printf("4. 退出\n"); printf("请输入你的选择(1-4):"); if (scanf("%d", &choice) == 1 && choice >= 1 && choice <= 4) { printf("你选择了选项 %d\n", choice); if (choice == 4) break; } else { printf("无效输入,请输入1-4之间的整数。\n"); while (getchar() != '\n'); // 清空输入缓冲区 } } return 0; }