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