之前忘了怎么写这个了,网上搜到的方法乱七八糟,运行还有问题。
这篇文章里我用 只输入数字和只输入一个字母 举例,其他需求之后会更新。
1.只允许输入数字
主要是靠设定一个int类型值来读取scanf_s返回的值。
判断输入的值的类型是否是我们设定的。比如
int valid = 0;
int x = 0;
valid = scanf_s("%d", &x);
如果输入的不是int类型值,则valid值为0,反之则为1。
附上我使用的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int valid = 0; //valid用于验证输入
int x = 0;
while (1) {
printf("请输入数字(需要大于1且小于30): ");
valid = scanf_s("%d", &x);
// 检查输入的内容是否符合要求
if (valid == 1 && x > 1 && x < 30) {
break; // 输入有效,退出循环
}
else {
printf("请重新输入符合规范的数字。\n\n");
//清除输入缓冲区,丢弃无效输入
while (getchar() != '\n');
}
}
return 0;
}
运行结果:
可见它不允许int类以外的值和规定范围外的数字被输入到后续程序。
2.只允许输入一个字母
主要是靠调用isalpha函数来判断读取的第一个字符是不是字母,第二个字符是不是回车,且不能第一个字符就直接回车。
判断输入的值的类型是否是我们设定的。比如
char input[100]; // 存储用户输入的字符串
fgets(input, sizeof(input), stdin); // 读取整行输入
if (isalpha(input[0]) && input[1] == '\n') { //判断条件,确保只输入了一个字母+回车
如果输入的不是int类型值,则valid值为0,反之则为1。
附上我使用的代码:
#include <stdio.h>
#include <ctype.h>
int main() {
char input[100]; // 存储用户输入的字符串
while (1) {
printf("请输入一个字母: ");
fgets(input, sizeof(input), stdin); // 读取整行输入
// 检查输入是否只包含一个字母
if (isalpha(input[0]) && input[1] == '\n') {
printf("您输入的字母是: %c\n", input[0]);
break;
}
else {
printf("无效输入,请确保只输入一个字母。\n\n");
}
}
return 0;
}
运行结果:
输入多个字母的方法同理。