如何通过c代码检查用户i / p是否正确.. 因为我们从用户i / p询问姓名和年龄,那么检查输入数据是否正确的语法应该是什么? 代码应该在C
中答案 0 :(得分:1)
对于名称,将用户输入存储在字符串中。如果数组元素不是'a'到'z'或'A'到'Z',则遍历字符串并说出错误。至于考虑年龄,可以使用char数组或整数。当用户输入'a'时使用整数,将采用ascii值。但是如果你使用char数组,你只能看到数字和限制。
int main()
{
char name[10],age[2];
int i;
printf("Enter name and age \n");
scanf("%s %s",name,age);
for(i=0; name[i]!=NULL; i++)
if(isdigit(name[i]))
printf("Error, name in aplahbets\n");
for(i=0; age[i]!=NULL; i++)
if(isalpha(age[i]))
printf("Error, age in numbers\n");
// Rest of your code Your code
return 0;
}
答案 1 :(得分:1)
年龄通常是一个自然数,范围从0到130.根据您的应用,更实际的范围可能是15到65.看看您的要求。
int IsNaturalNumber(const char* number)
{
while(*number) {
if(!isdigit(*number))
return 0;
++number;
}
return 1;
}
char age[20+1] = { 0 };
if(!fgets(age, 20, stdin)) error("EOF reached!");
if(!IsNaturalNumber(age)) error("Please enter a natural number!");
int age_as_int = atoi(age);
if(age_as_int < LOWER_AGE_BOUND || age_as_int > UPPER_AGE_BOUND)
error("Age must be between %d and %d.", LOWER_AGE_BOUND, UPPER_AGE_BOUND);
名字很棘手。什么是正确的名字?一种常用的形式是Salutation(Mr./Mrs./Miss),名字和姓氏/姓氏。这涵盖了很多文化。不要忘记考虑语言。 Mr. = Herr,Mrs。= Frau,Miss =Fräulein,例如德语。此外,一些文化在表格中的名字之前更喜欢姓氏(例如日本)。你有什么要求?你需要考虑所有文化,还是仅仅考虑一些文化?
答案 2 :(得分:0)
进行输入验证的常用方法是将输入作为字符串读入程序,然后对其进行验证并转换为预期的类型。
对于名称,您可以执行的验证不多。您可以(并且应该)检查输入是否超出您的预期,否则大多数输入应被视为有效名称。
对于年龄,您可以进行更多验证。首先输入必须是有效整数,其次,它必须在一定范围内。
您可以使用以下功能:
char* readString(char* buffer, size_t buflen)
{
char* result;
result = fgets(buffer, buflen, stdin);
if ((result != NULL) &&
(strlen(result) == buflen-1) &&
(result[buflen-2] != '\n'))
{
/* too long a line */
/* read the remainder of the line, to clear the input buffers */
while ((result != NULL) && (result[strlen(result)-1] != '\n'))
{
result = fgets(buffer, buflen, stdin);
}
/* set result to NULL to indicate an error */
result = NULL;
}
if (result != NULL)
{
/* strip the newline */
result[strlen(result)-1] = '\0';
}
}
bool readInt(int low, int high, int* value)
{
char temp[80];
if (readString(temp, 80))
{
char* endp;
long result = strtol(temp, &endp, 10);
if ((*endp == '\0') && (result >= low) && (result <= high))
{
*value = result;
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
答案 3 :(得分:0)
没有任何年龄溢出/下溢检查,可以采用以下简短解决方案:
char name[40];
unsigned age;
if( scanf("%39s%u",name,&age)==2 )
printf("name=%s age=%u",name,age);
else
puts("input invalid");
你应永远检查任何用户输入的回报。