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;
}