我已经阅读了扫描集的行为。通过学习我遇到了一个想法。扫描集为scanf()
的[^\n]
的行为是否与没有扫描集的相同?它消耗字符,直到读取\n
字符为止。
例如:
scanf("%[^\n]s", str);
相比:
scanf("%s",str);
由于scanf()
默认情况下会忽略空格字符(例如换行符),因此行为是否相同?
为什么我要使用scanf()
的扫描集来实现[^\n]
语句,然后在默认情况下已经将其视为这样?
或者我的假设在这里错了吗?
非常感谢。
您似乎误以为扫描集是%s
的某种修饰符,如您的示例所示:
scanf("%[^\n]s", str);
这是scanf格式的字符串,将始终与末尾的文字's'
始终匹配。
相反,%[
是与%s
完全不同的转换说明符。 %s
在开始使用之前消耗并忽略任何初始空白,然后在空白处停止。 %[
完全不会忽略前导空格,只会停在不匹配的字符上-它不会特别对待空格。