难道[^ \ n]的scanset指令scanf()做与没有scanset一样的事情,因为scanf()默认情况下会跳过空格字符吗?

问题描述 投票:0回答:1

我已经阅读了扫描集的行为。通过学习我遇到了一个想法。扫描集为scanf()[^\n]的行为是否与没有扫描集的相同?它消耗字符,直到读取\n字符为止。

例如:

scanf("%[^\n]s", str);

相比:

scanf("%s",str);

由于scanf()默认跳过换行符之类的空格字符,所以行为是否相同?

为什么我要使用scanf()的扫描集来实现[^\n]语句,然后在默认情况下已经将其视为这样?

或者我的假设在这里错了吗?

非常感谢。

c scanf
1个回答
3
投票

您似乎被误认为scanset是%s的某种修饰符,如您的示例所示:

scanf("%[^\n]s", str);

这是scanf格式的字符串,将始终与末尾的文字's'始终匹配。

相反,%[是与%s完全不同的转换说明符。 %s在开始使用之前消耗并忽略任何初始空白,然后在空白处停止。 %[完全不会忽略前导空格,只会停在不匹配的字符上-它不会特别对待空格。

© www.soinside.com 2019 - 2024. All rights reserved.