我已经阅读了扫描集的行为。通过研究和测试,我遇到了一个问题。
难道 scanf("%[^\n]")
的行为与 scanf("%s")
一样吗?
scanf("%s")
正在消耗字符,直到在 stdin
中找到空白字符,例如 \n
字符.所以结果应该和scanf("%[^\n]")
完全一样。
例如:
char str[100];
scanf("%99[^\n]s", str);
相比于:
char str[100];
scanf("%99s",str);
所以我的问题是:
行为是否相同,因为
scanf("%s")
在尾随空白字符(例如换行符)处停止?为什么我应该实现
scanf("%[^\n]")
而scanf("%s")
已经执行相同的操作?
非常感谢。
最佳答案
您似乎误以为 scanset 是 %s
的某种修饰符,如您的示例所示:
scanf("%[^\n]s", str);
这是一个 scanf 格式的字符串,总是无法匹配末尾的文字 's'
。
相反,%[
是与 %s
完全不同的转换说明符。 %s
在开始之前消耗并忽略任何初始空白,然后在空白处停止。 %[
根本不会忽略前导空格,只会在不匹配的字符处停止——它不会特殊处理空格。
关于c - scanf ("%[^\n]") 和 scanf ("%s") 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58563758/