gpt4 book ai didi

c - sscanf 函数未按要求读取格式

转载 作者:行者123 更新时间:2023-12-04 11:40:31 27 4
gpt4 key购买 nike

我正在尝试在 C 中使用 sscanf 函数,但它不读取格式是必需的,我已经阅读了该函数的文档并遵循了示例,但它对我来说仍然效果不佳,因此我想要一些建议..

int main() {

long int id;
float grade,age;
char name[40],city[40],country[40],line[100]="388891477\tItzel\tGardner\t21\t6\tIran\tTehran";

int read_items = sscanf(line,"%ld %*[\t] %[a-zA-Z -] %*[\t] %f %*[\t] %f %*[\t] %[a-zA-Z -] %*[\t] %[a-zA-Z -]",
&id,name,&age,&grade,country,city);

printf("readed line is: %ld %s %f %f %s %s. sscanf() read %d items\n",id,name,grade,age,country,city,read_items);

}

当前输出:

readed line is: 3888914775  0.000000 0.000000  @�'�. sscanf() read 1 items

预期输出:

readed line is: 3888914775 Itzel Gardner  21.000000 26.000000 Iran Tehran. sscanf() read 6 items

另一个编辑:

问题要求是添加制表符,因此如果输入中有空格,它应该返回此输入不正确并且不应读取它,这就是我添加制表符的主要原因,因此它只能读取具有制表符的输入在其中,例如,如果 id 和 name 之间的输入只有 1 个空格,则不应读取它。抱歉让大家感到困惑

所以在行[100]="3888914775 Itzel Gardner 21 26 Iran Tehran";

输入之间的分隔输入只能是制表符(不能是一两个空格..)

正确输入示例:

line[100]="388891477\tItzel\tGardner\t21\t6\tIran\tTehran";

最佳答案

据我所知,您的代码存在一些问题。

首先,%*[\t] 说明符会造成干扰,因此没有必要。 sscanf 中说明符之间的空格将导致所有空格被消耗。

其次,您拥有的 ID 值可能会溢出 long int,因此您可能需要使用 long long 而不是 %lld说明符。

最后,似乎有些混淆是空格还是制表符分隔字段。空格是所有字符串字段的有效值,但也在字段之间给出。您的评论提到了制表符,但我在您的 line 字符串中没有看到任何内容。如果您使用制表符分隔您的字段,事情会好得多,因为制表符不是您的说明符集的一部分。

这是我对您的代码的更新,更正了上述所有内容:

#include <stdio.h>

int main() {

long long id;
float grade,age;
char name[40],city[40],country[40],line[100]="3888914775\tItzel Gardner\t21\t26\tIran\tTehran";

int read_items = sscanf(line,"%lld %[a-zA-Z -] %f %f %[a-zA-Z -] %[a-zA-Z -]",
&id,name,&age,&grade,country,city);

printf("readed line is: %lld %s %f %f %s %s. sscanf() read %d items\n",id,name,grade,age,country,city,read_items);

}

输出:

readed line is: 3888914775 Itzel Gardner 26.000000 21.000000 Iran Tehran. sscanf() read 6 items

关于c - sscanf 函数未按要求读取格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820421/

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