You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中测试输入类型?求浮点、字符串、字符测试示例

C语言输入验证完整示例代码

需求说明

验证用户输入合法性:当要求输入整数时输入字符串/符号、要求输入字符串时输入整数等类型不匹配场景,输出错误提示。以下是覆盖整数、浮点、字符串、字符四种输入类型的完整验证实现。

完整代码实现

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

// 错误提示函数
void wrongInput() {
    printf("输入错误!请输入符合要求的类型。\n");
    // 清理输入缓冲区,避免残留字符影响后续输入
    while (getchar() != '\n');
}

// 获取并验证整数输入
int getAge() {
    int age;
    int result;
    puts("请输入你的年龄(整数):");
    result = scanf("%d", &age);
    if (result == 1) {
        printf("你输入的年龄是:%d\n", age);
        // 清理缓冲区(处理输入后多余字符,比如"20abc"这类情况)
        while (getchar() != '\n');
        return age;
    } else {
        wrongInput();
        return getAge(); // 重新要求输入
    }
}

// 获取并验证浮点类型输入
float getHeight() {
    float height;
    int result;
    puts("请输入你的身高(浮点型,如1.75):");
    result = scanf("%f", &height);
    if (result == 1) {
        printf("你输入的身高是:%.2f\n", height);
        while (getchar() != '\n');
        return height;
    } else {
        wrongInput();
        return getHeight();
    }
}

// 获取并验证字符串输入(允许包含空格)
void getName(char *name, int maxLen) {
    puts("请输入你的姓名(字符串):");
    // 使用fgets读取完整字符串,避免scanf("%s")截断空格
    if (fgets(name, maxLen, stdin) != NULL) {
        // 去除fgets读取的换行符
        size_t len = strlen(name);
        if (len > 0 && name[len-1] == '\n') {
            name[len-1] = '\0';
        }
        // 验证是否为纯数字(按需调整规则)
        int isAllDigit = 1;
        for (int i = 0; name[i] != '\0'; i++) {
            if (!isdigit(name[i])) {
                isAllDigit = 0;
                break;
            }
        }
        if (isAllDigit) {
            printf("输入错误!姓名不能为纯数字。\n");
            getName(name, maxLen);
            return;
        }
        printf("你输入的姓名是:%s\n", name);
    } else {
        wrongInput();
        getName(name, maxLen);
    }
}

// 获取并验证单个字符输入
char getGender() {
    char gender;
    puts("请输入你的性别(单个字符,如M/F):");
    // 先清理缓冲区,避免之前的残留字符干扰
    while (getchar() != '\n');
    gender = getchar();
    // 确保输入的是单个字符,无多余内容
    char nextChar = getchar();
    if (nextChar != '\n' && nextChar != EOF) {
        wrongInput();
        return getGender();
    }
    // 限定输入范围,只接受M/F/m/f
    if ((gender != 'M' && gender != 'F' && gender != 'm' && gender != 'f')) {
        printf("输入错误!请输入M/F/m/f。\n");
        return getGender();
    }
    printf("你输入的性别是:%c\n", gender);
    return gender;
}

int main() {
    int age = getAge();
    float height = getHeight();
    char name[50];
    getName(name, 50);
    char gender = getGender();

    printf("\n--- 输入汇总 ---\n");
    printf("年龄:%d\n身高:%.2f\n姓名:%s\n性别:%c\n", age, height, name, gender);
    return 0;
}

代码说明

  • 缓冲区清理:每次输入成功或失败后,都会清理输入缓冲区的残留字符,避免后续输入被干扰。
  • 整数/浮点验证:通过scanf的返回值判断是否成功读取对应类型,返回1表示读取有效。
  • 字符串验证:用fgets支持带空格的字符串输入,额外添加纯数字判断(可根据需求修改验证规则)。
  • 字符验证:确保输入为单个字符,且符合指定范围,避免多字符输入的异常情况。

内容的提问来源于stack exchange,提问作者yuchen liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:25:23