Ver*_*tas 3 c buffer input scanf
我花了一个小时试图找出原因
char buffer[101];
scanf("%100[^\n]", buffer);
Run Code Online (Sandbox Code Playgroud)
按预期工作,读取字符串直到遇到换行符,同时
char buffer[101];
scanf("%100[^\n]\n", buffer);
Run Code Online (Sandbox Code Playgroud)
按Enter键后不返回.
在按Enter后立即用CtrlD(在linux中)显式刷新输入缓冲区似乎解决了问题,强制scanf返回.我在这里错过了什么吗?
是的,您错过了一个记录良好的重要细节.根据scanf手册 ...
由一个或多个空格字符组成的指令应通过读取输入执行,直到不再能够读取有效输入,或者直到第一个不是空白字符的字节为止,该字节仍未读取.
这意味着scanf当你按Enter键时确实不会返回; 它将继续等待你再次按下回车(或空格或标签)......再次......直到它看到不是空白的东西.
如果你想丢弃'\n'scanset指令后面的那个,你可以%*c像这样使用:int x = scanf("%100[^\n]%*c", buffer);...
PS别忘了检查价值x.使用scanset指令时尤其重要,因为buffer在这种情况下,空行将导致未初始化.