条件检查scanf()或继续输入

时间:2015-08-13 07:22:43

标签: c user-input scanf

我必须使用来自用户的全名输入来缩写第一个,中间名和姓氏,例如if firstName.isFirstResponder { // caused due to firstName } else if lastName.isFirstResponder { // caused due to lastName } 作为ram kumar shahu。问题是如果我只得到名字和姓氏然后我应该打印r.k. shahu

以下是我的代码。

r. shahu

2 个答案:

答案 0 :(得分:1)

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

  1. 使用fgets()
  2. 阅读用户的整个输入
  3. 根据固定分隔符开始标记,可能是空格。您可以使用strtok()
  4. 如果令牌数为2,则令牌被视为名字和姓氏
  5. 如果令牌cout为3,则它们是名字,中间名和姓氏。
  6. 然后,您可以打印出所需的所有标记中的第一个元素(1或2)。也就是说,在情况3中,您打印第一个标记的第一个元素和完整的第二个标记,如果是4,则从第一个和第二个标记打印第一个元素,第三个标记完整打印。

答案 1 :(得分:1)

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