【问题标题】:How can I know if the input is alphabet or not? I must only accept letters and a dot for middle initial in name我怎么知道输入是否是字母?我必须只接受名字中间首字母的字母和点
【发布时间】:2013-09-07 02:44:10
【问题描述】:

如何检查输入是否为字母?我必须只接受字母和 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");
        }   
    }
}

帮助?

【问题讨论】:

    标签: c arrays string fgets


    【解决方案1】:

    您可以使用以下代码:

    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");
                }   
            }
    

    【讨论】:

    • 嗯...fgets() 仅在 失败 时返回 NULL。因此,假设它没有执行,则 if 块中的 nothing 将执行。循环条件重复执行strlen() 是一种不好的做法,应该早点而不是晚点打破。
    • @WhozCraig 是的,当 fgets 失败并且 if 块中的语句不会影响很多时,只有一种可能性。抱歉,我没有注意到那个。需要使用这个 while((fgets(name[i], LEN, stdin))!=NULL) 而不是 if((fgets(name [i], LEN, stdin))==0)
    • @Gangadhar:请编辑您的答案以更正此问题。
    【解决方案2】:

    读取使用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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      相关资源
      最近更新 更多