如何在C中的结构成员中扫描带有空格的字符串?

时间:2017-06-06 16:20:55

标签: c

struct Demo{
   char a[50];
   char b[50];
   int a;
};
  • 任何人都可以为此结构演示Demo,其中a和b将包含不同单词的字符串[white-spaces]。

    我试过

    • scanf("[^\n]s",name.a); //where name is the object
    • fgets(name.a,50,stdin);

注意:我们也不能使用gets方法

所以,如果有任何其他方法,请提供给我。

1 个答案:

答案 0 :(得分:2)

要将用户输入的读入char a[50];,其潜在结尾'\n'已修剪:

if (fgets(name.a, sizeof name.a, stdin)) {
  name.a[strcspn(name.a, "\n")] = '\0'; // trim \n
}

需要做的工作是应对消耗过多的长输入行并使用name.a[]的最后一个元素,例如:

// Alternative
if (scanf("%49[^\n]", name.a) == 1) {
  // consume trailing input
  int ch;
  while ((ch = fgetc(stdin)) != '\n' && ch != EOF) {
    ;
  }
} else {  // Handle lines of only \n, end-of-file or input error
  name.a[0] = '\0';
}

scanf("%49[^\n]%*c", name.a)方法在两种情况下有问题:
1)输入仅为"\n"name.a中未保存任何内容,'\n'中保留stdin。 2)输入超过49个字符('\n'除外),%*c消耗额外字符,但长输入行的其余部分保留在stdin
这两个问题也可以通过附加代码解决。