我必须从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);
}
首先,您正在处理不知道输入长度的情况。我建议你采取以下方法。
- 使用
fgets()
读取用户的全部输入 - 开始基于固定分隔符进行标记,可能是一个空格。你可以使用
strtok()
- 如果令牌计数为2,则令牌被视为姓和名
- 如果token计数为3,则它们是名、中、姓。 然后,您可以从所需的所有令牌(1或2)中打印出第一个元素。也就是说,在情况3中,您打印第一个令牌的第一个元素和完整的第二个令牌,在情况4中,您打印第一个和第二个令牌的第一个元素和完整的第三个。