【问题标题】:Reading multiple character arrays in C using scanf [duplicate]使用scanf在C中读取多个字符数组[重复]
【发布时间】:2018-08-06 14:46:22
【问题描述】:
  char a[100],b[100],c[100];
  scanf("%[^\n]",a);
  printf("%s",a);
  scanf("%[^\n]",b);
  printf("%s",b);

编译器似乎正在读取第一次读取,但跳过了第二次读取。为什么会这样?

【问题讨论】:

  • 不要使用scanf。如果您不想要它,请使用 fgets 并去掉 \n
  • 或者,如果您想使用scanf,您可以使用scanf("%99[^\n]%*c", a); 使用并丢弃换行符。 (添加99 以避免缓冲区溢出)。
  • 提示:当 I/O 没有按预期工作时,第一道防线编码是检查函数的结果值。 int cnt = scanf("%[^\n]",b); if (cnt != 1) printf("Unexpected scan %d\n", cnt); 可以帮助这段代码缩小问题的范围。

标签: c


【解决方案1】:

由于未处理回车 使用fgets()

试试这个:-

char a[100], b[100], c[100];
fgets(a, 100, stdin);
printf("%s", a);
fgets(b, 100, stdin);
printf("%s", b);

【讨论】:

  • 为什么会有这样的问题?
  • 扫描a时生成的newline赋值给b
  • 测试fgets() 的返回值将防止文件提前结束时潜在的未定义行为。
  • @anoopknr The newline generated in scanning a is assigned to b --> 没有scanf("%[^\n]",b);b 不会得到分配的'\n'
猜你喜欢
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多