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



我必须从from user,e的全名输入中以缩写形式打印名、中、姓。g ram kumar shahu作为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;
    }
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.%sn",fname[0], mname);
} else if(state == 3){
    printf("%c.%c.%sn",fname[0], mname[0], lname);
}

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

  1. 使用fgets()读取用户的全部输入
  2. 开始基于固定分隔符进行标记,可能是一个空格。你可以使用strtok()
  3. 如果令牌计数为2,则令牌被视为姓和名
  4. 如果token计数为3,则它们是名、中、姓。
  5. 然后,您可以从所需的所有令牌(1或2)中打印出第一个元素。也就是说,在情况3中,您打印第一个令牌的第一个元素和完整的第二个令牌,在情况4中,您打印第一个和第二个令牌的第一个元素和完整的第三个。

相关内容

  • 没有找到相关文章

最新更新