如何在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
相关产品推荐
相关产品推荐

