C 如何将输入限制在所需的范围内?(例如:没有应该输入字母的数字)

C 如何将输入限制在所需的范围内?(例如:没有应该输入字母的数字),c,input,C,Input,谁能告诉我检查输入类型的最佳方法是什么?例如,如果我要求某人输入姓名,我希望确保他们不输入数字。或者,当我询问他们的年龄时,我也不希望字母被插补。我尝试过使用switch语句,但这似乎不是个好主意。isalpha()在C中只对字符有效。构建一个函数,该函数遍历字符串并检查isalpha()是否接受所有字符 见: int string_是_名称(char*s) { int i; int valid=1; 对于(i=0;i0&&buf[n]='\0')GoodName()最好使用 STARTROR(

谁能告诉我检查输入类型的最佳方法是什么?例如,如果我要求某人输入姓名,我希望确保他们不输入数字。或者,当我询问他们的年龄时,我也不希望字母被插补。我尝试过使用switch语句,但这似乎不是个好主意。

isalpha()
在C中只对字符有效。构建一个函数,该函数遍历字符串并检查
isalpha()是否接受所有字符

见:

int string_是_名称(char*s)
{
int i;
int valid=1;
对于(i=0;i
到目前为止,您尝试了什么?输入是C字符串的形式吗?你们有“正则表达式”库吗?这是最简单的检查方法。否则,您必须逐个字符检查字符串并检查isalpha()、isdigit()等。使用诸如
isdigit
isalpha
之类的函数来测试字符是数字还是字母。
sscanf()
idea:
char buf[100];fgets(buf、buf尺寸、标准尺寸);int n=-1;sscanf(buf,“%*[A-Za-z]%*[\n]%n”,&n);如果(n>0&&buf[n]='\0')GoodName()最好使用<代码> STARTROR()/<代码>测试数字输入的函数族。在编写更多的代码来处理名称之前,您可以考虑阅读。1)最好使用<代码>!isalpha((无符号字符)s[i])
以防止UB。2) 最好使用
size\u ti@chux您使用大小作为循环索引?为什么这是一个更好的方法?@chux我能想到的唯一原因是溢出(如果数组中的元素超过MAX_INT),但这真的会发生吗?使用int或unsigned int更清晰,否?哪个更清晰?
int
unsigned
size\u t
是一个主观问题,因此不可能给出明确的答案。但是使用
size\u t
在技术上是正确的,因为
size\u t
strlen()
的返回类型,并且
size\u t
是为从基
s
索引数组而定义的
int
如您所述存在负索引(此处不适用)和范围问题。“这真的会在这里发生吗?”:除非有人在64位计算机上编写病毒以利用
int
范围的弱点,否则这种情况不太可能发生。我建议你练习安全索引。谢谢你的洞察力。我以后会记住这一点。
int string_is_name(char *s)
{
    int i;
    int valid = 1;
    for (i = 0; i < strlen(s); i++) {
        if (!isalpha(s[i])) {
            valid = 0;
            break;
        }
    }
    return valid;
}