【发布时间】: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