条件检查 scanf () 或获取输入

condition check on scanf ()or get on input

我必须从用户输入的全名中打印名字、中间名和姓氏的缩写,例如 ram kumar shahu as r.k. shahu。问题是如果我只得到名字和姓然后我应该像 r. shahu.

这样打印

以下是我目前的代码。

 #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
        char fname[10],mname[10],lname[10];
        printf("Enter the name:\n");
        if(lname==NULL)
        {
           scanf("%s %s ",fname,mname);
        }
        else
            scanf("%s %s %s",fname,mname,lname);
        if(lname==NULL)
        {
            printf("%c.%s",fname[0],mname);
        }
        else
            printf("%c.%c.%s",fname[0],mname[0],lname);
        return 0;
    }

首先,您正在处理不知道输入的长度 的情况。我建议您采用以下方法。

  1. 使用 fgets()
  2. 读取用户的全部输入
  3. 开始基于固定分隔符进行分词,可能是 space。您可以使用 strtok()
  4. 如果令牌计数为 2,则令牌被视为名字和姓氏
  5. 如果令牌 cout 为 3,则它们是名字、中间名和姓氏。
  6. 然后,您可以打印出所有所需标记中的第一个元素(1 或 2)。也就是说,在情况 3 中,您打印第一个标记的第一个元素和完整的第二个标记,在情况 4 中,您打印第一个和第二个标记的第一个元素以及完整的第三个。
char fname[10],mname[10],lname[10];
char line[30];
int state;

printf("Enter the name:\n");
fgets(line, sizeof line, stdin);
state = sscanf(line, "%9s %9s %9s", fname, mname, lname);
if(state == 2){
    printf("%c.%s\n",fname[0], mname);
} else if(state == 3){
    printf("%c.%c.%s\n",fname[0], mname[0], lname);
}