在C语言中,判断用户输入的是否是一个整数是一个常见的任务。由于 scanf 等输入函数在遇到非数字字符时可能会停止读取或产生不可预测的行为,因此直接使用它们来判断通常不可靠。

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

推荐文档