c - scanf 格式说明符之间的区别

标签 c scanf

以下两个 scanf() 函数有什么区别:

scanf(" %79[^\n]\n",name);

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

我是 C 新手,所以如果有人认为这是一个菜鸟问题,请原谅我。我做了所有我能做的研究,但我无法区分以上两者之间的区别。

上述两者的功能有何不同?第一个将从标准输入中获取所有字符(直到 79 个字符),直到遇到 '\n' 字符。那么第二个不会以同样的方式工作吗?我有这个疑问,因为在一个程序中,第一个程序工作正常,但第二个程序无法正确输入字符串。

除了上面的主要问题只是为了澄清之外,我认为 scanf 函数末尾的 '\n' 将从字符串输入期间输入的缓冲区中删除 '\n' 字符。我是对还是错?

最佳答案

scanf(" %79[^\n]\n",name);

这会匹配零个或多个空白字符、最多 79 个非换行符和一个换行符,并将非换行符保存到 name 中。


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

这会匹配零个或多个空白字符、最多 79 个非换行符、字符 s 和换行符,并将非换行符保存到 name 中。

关于c - scanf 格式说明符之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23709955/

相关文章:

c - sscanf - 多次使用同一个变量

arrays - 警告 : format ‘%s’ expects type ‘char *’ , 但参数 2 的类型为 ‘char (*)’

python - Cython函数内存泄漏

c - 二维莫顿解码功能 64bits

c - 是否有在转义模式下打印字符串的功能?

c - 当需要整数输入时处理 "non-numerical characters"

c - fscanf 扫描不正确的信息

c - 递归:如何防止 for 循环中的变化变量在递归期间发生变化?

php - C 中的 OpenSSL "Seal"(或通过 shell)

C 输入作业