我花了一个小时试图找出原因
char buffer[101];
scanf("%100[^\n]", buffer);
按预期工作,读取字符串直到遇到换行符,而
char buffer[101];
scanf("%100[^\n]\n", buffer);
按Enter键后不返回。
使用CtrlD显式刷新输入缓冲区(在linux中) 按Enter键后立即解决问题, 强制scanf返回。我在这里错过了什么吗?
答案 0 :(得分:5)
是的,您错过了一个记录良好的重要细节。根据{{3}} ...
由一个或多个空格字符组成的指令应通过读取输入执行,直到不能再读取有效输入,或者直到第一个不是空白字符的字节仍未读取。
这意味着当你按回车键时scanf
确实不会返回;它会继续等待你再次按下回车(或空格或标签)......再次......直到它看到不是空白的东西。
如果您要放弃扫描集指令后面的'\n'
,可以使用%*c
,如下所示:int x = scanf("%100[^\n]%*c", buffer);
...
P.S。不要忘记检查x
的值。使用scanset指令时尤其重要,因为在这种情况下,空行将导致未初始化的buffer
。