0

如何检查输入是否是字母?我必须只接受字母和 1 个点作为中间名的首字母。我该怎么做?

这是我的代码:

void name_check()
{
    printf(LEV3"Name:\t");
    int y=0;
    if ((fgets(name[i], LEN, stdin))==0)
    {
        y = atoi(name[i]);
        if((isalpha(y))!=0)
        {
        }
        else
        {
            printf(LEV3"ERROR: Invalid Name. Name should consist of letters only.\n");
            name_check();
            printf("\n");
        }   
    }
}

帮助?

4

2 回答 2

0

您可以使用以下代码:

int  j=0;
if ((fgets(name[i], LEN, stdin))==0)
        {
           // y = atoi(name[i]);
            while( j<strlen(name[i]) && (isalpha(name[i][j]) || name[i][j]=='.'))
                j++;

            if(j==strlen(name[i]));
            {
            //....
            }
            else 
            {
                printf(LEV3"ERROR: Invalid Name. Name should consist of letters only.\n");
                name_check();
                printf("\n");
            }   
        }
于 2013-09-07T02:49:10.767 回答
0

阅读使用fgets()sscanf()解析。

char buffer[300];
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
  printf("EOF\n"); // TBD handle EOF or I/O error
}
else {
  char First[100];
  char Middle[100];
  char Dot[2];
  char Last[100];
  int n;
  n = sscanf(buffer, " %99[A-Za-z]  %98[A-Za-z]%1[. ]  %99[A-Za-z]", First, Middle, Dot, Last);
  if (4 != n) {
    printf("Oops %d\n", n); // TBD handle syntax error
  }
  if (Dot[0] == '.')
    strcat(Middle, Dot);
  printf("%s %s %s\n", First, Middle, Last);
}
于 2013-09-07T03:59:14.560 回答