【发布时间】:2014-12-11 01:21:19
【问题描述】:
我目前正在阅读《C11 初学者编程》这本书,在 scanf() 章节中它说:
“始终在第一个控制字符串字符之前添加一个前导空格,以确保准确的字符输入。”如:
scanf(" %s", whatever);
控制字符串" %s",前面有一个空格。
我知道这听起来很不言自明,但我真的不明白可能出了什么问题,以及这个空间如何确保准确的字符输入。
【问题讨论】:
-
最好附带一个大警告 Single char
%cfetching 可能是该大锤声明背后的主要理由,并且未能提供这样的细节让我质疑巫毒教的教学意识形态文本。 “总是做”没有某种解释为什么你应该遵循这个口头禅,如果你不这样做,事情会如何出错,通常比有帮助(例如,您发布此问题...)。无论如何,您可能会发现 this answer 很有帮助。 -
那本书真的叫C11 Programming for初学者吗?
scanf在 C11 中不是被scanf_s取代了吗? -
@AndersMarziTornblad: 否。
scanf_s()是Annex K §3.5.3.4 Thescanf_sfunction 中定义的可选函数。微软宁愿你使用他们的scanf_s()版本,但很少有其他编译器/库实现了它。这些函数的签名一致,_s(更安全)函数无法保证这一点。 -
"%s"表示:忽略可选的前导空格并读取空格分隔的字符串..." %s"表示忽略可选的空格,然后忽略可选的前导空格并读取空格分隔的字符串。