具有scanset为[^ \ n]的scanf()函数的行为与没有scanset时的行为相同吗?

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

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

例如:

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

相比:

scanf("%s",str);

由于scanf()默认情况下会忽略空格字符(例如换行符),因此行为是否相同?

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

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

非常感谢。

c scanf
1个回答
1
投票

您似乎误以为扫描集是%s的某种修饰符,如您的示例所示:

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

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

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

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