c - scanf ("%[^\n]") 和 scanf ("%s") 之间的区别?

标签 c string scanf newline whitespace

我已经阅读了扫描集的行为。通过研究和测试,我遇到了一个问题。

难道 scanf("%[^\n]") 的行为与 scanf("%s") 一样吗?

scanf("%s") 正在消耗字符,直到在 stdin 中找到空白字符,例如 \n 字符.所以结果应该和scanf("%[^\n]")完全一样。


例如:

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

相比于:

char str[100];
scanf("%99s",str);

所以我的问题是:

  1. 行为是否相同,因为 scanf("%s") 在尾随空白字符(例如换行符)处停止?

  2. 为什么我应该实现 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/

相关文章:

c - 访问 C 中的结构节点

asp.net - 你调用的对象是空的。在 Guid.Parse 上

c - 关于 C 和 eclipse - scanf

c - 我可以使用什么来代替 scanf 进行输入转换?

c - 如何使用 scanf 从下一行输入数据中获取输入?

c - Windows 7 : Launching an application silently with admin privileges under default user account?

c - 如何获得pthreads的正确执行顺序

python - 如何改进这个 find() 函数(或类似函数)

找到字符时切割字符串

在 C 中将输入数字字符串转换为整数