no,&pow->seen,pow->word,pow->means); printf("\-6ren">
gpt4 book ai didi

c - 为什么 [0-9A-Z^%] 后不应该有 s 或 c 之类的类型说明符?

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:36 25 4
gpt4 key购买 nike

例如考虑下面的代码-

fscanf(fp,"%d:%d:%[^:]:%[^\n]\n",&pow->no,&pow->seen,pow->word,pow->means);     
printf("\ntthis is what i read--\n%d:%d:%s:%s:\n",pow->no,pow->seen,pow->word,pow->means);

这里的pow是指向之前声明的对象的指针,

当我将 s 放入 fscanf(fp,"%d:%d:%[^:]s:%[^\n]\n"第三个被阅读但不是最后一个

输出是——4:0:Abridge::

但是当我执行 fscanf(fp,"%d:%d:%[^:]:%[^\n]s\n" 时,所有内容都已读取输出是——4:0:Abridge:To condense:

AND 任何地方都没有 s fscanf(fp,"%d:%d:%[^:]:%[^\n]\n" 全部读取输出是——`4:0:Abridge:要压缩:

为什么??

最佳答案

要回答您的问题,%[^\n]s 的含义是什么,有两种格式说明符,一种是 [],另一种是 s

现在第一个将扫描除 \n 之外的任何内容,然后它获取 \n 并将其保存在标准输入中。继续前进。但它并不止于此 - 它基本上会尝试找到字母 s 的匹配项。如果它找不到它 - 它会失败。 (%[^:]s 的解释与此相同)。

现在决定这是否是您真正想要的。[^\n] 是正确的,它将扫描直到找到 \n(是的,它没有t 像 %s 那样跳过空格)。扫描集还涵盖了包括 s 在内的字母。不仅如此,%[^\n]s 是自相矛盾的。所以也没有用。


%d:%d:%[^:]s:%[^\n]


%d - Matches an optionally signed decimal integer. (Ignore whitespace)
: - Then looks for ':'
%d - Matches an optionally signed decimal integer. (Ignore whitespace)
: - Then looks for ':'
%[^:] - No white space ignored - everything is taken into input except `:`
':' is unread.
s - Tries to match 's'. No white space ignored.
%[^\n] - Everything except '\n' inputted. `\n` left unread.

关于c - 为什么 [0-9A-Z^%] 后不应该有 s 或 c 之类的类型说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49096042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com