c - %*[^\n] (scanf) 在 c 中如何工作?

标签 c string scanf

有人可以解释一下 %*[^n] 是如何工作的吗?我明白,如果我像 scanf("%*[^\n]") 这样使用它它应该忽略所有输入,直到遇到换行符,但是当我尝试这样的事情时真正发生的情况 scanf("%*[^\n],%10s",str) str 是一个声明的字符串,我认为换行符后的所有输入 包括换行符将进入字符串,但当我尝试打印它时,它只会打印无效字符。

最佳答案

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

尝试读取并丢弃直到(但不包括)下一个换行符的所有内容,然后尝试匹配逗号,然后将最多 10 个非空白字符读入 str.

这是行不通的,因为如果你读到换行符,那么流中的下一个字符将是换行符,而不是逗号。您可能会遇到匹配失败,并且 str 的内容不会更新。检查 scanf 的返回值,看看您是否成功读取了您期望的项目数(在本例中为 1)。

可能想要

scanf( "%*[^\n]%10s", str ); // no comma in format string.

这将读取并丢弃直到下一个换行符的所有内容,然后将跳过任何空格,最多 10 个非空格字符将 b3 读入 str

关于c - %*[^\n] (scanf) 在 c 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59474001/

相关文章:

c++ - 传递三重指针以在另一个函数中分配内存,sscanf 异常

assembly - intfmt : db "%d", 10, 0在汇编中的含义

c - const 字符串动态数组的正确类型

c - 如何将 add_dependency 与 CMake 一起用于非子目录?

c - AES CTR 加解密

包含不同但相似字符串的对象的 Java hashcode() 冲突

java - 测试字符串是否包含数组中的任何字符串

javascript - array.map 在字符串中连接时自动附加逗号?

c - 如何使用 getchar() 扫描一个单词

c - C 中线程特定数据的示例