gpt4 book ai didi

c - 如何从 txt 文件中读取制表符分隔的字符串并将它们放入变量中?

转载 作者:行者123 更新时间:2023-12-02 07:06:36 25 4
gpt4 key购买 nike

我有一个文件正在尝试读取和填充变量。该文件由以下内容组成:

0\ttake a nap\n
1\tstudy heap-based priority queue\n
101\treview trees for Midterm 2\n
3\tdo assignment 7\n

这可能很难阅读,但是您可以看到有一个整数开头,然后是一个制表符,然后是一个字符串,然后是一个换行符。我需要取整数并将其放入变量中,检测制表符,并将制表符后面的字符串放入变量中,检测换行符,获取两个变量并使用信息创建一个节点,然后重新开始下一行。经过数小时的互联网搜索,这是我想出的:

char activity[SIZE];
char position[SIZE];
char line[100];

FILE *infile;
char *inname = "todo.txt";

int i = 0;


infile = fopen(inname, "r");
if (!infile) {
printf("Couldn't open %s for reading\n");
return 0;
}
while(i < 100 && fgets(line, sizeof(line), infile) != NULL){
sscanf(line, "%s\t%s", position, activity);
printf("%s\n", position);
printf("%s\n", activity);
i++;
}

在上面的 txt 文件上运行这个测试代码时,我得到了这个结果:

0
take
1
study
101
review
3
do

所以,在我看来,它正在获取第一个数字(作为字符串)并将其放入变量中,查看选项卡,并在选项卡之后抓取第一个序列并在将其放入另一个变量后停在那里.我该如何纠正这种情况?

最佳答案

您可以尝试更改sscanf:

sscanf(line, "%s\t%[^\n]", position, activity);

%s 说明符在遇到空格时停止。这就是为什么它只读取 study 而不是 study 基于堆的优先级队列%[^\n] 告诉它:“读到换行符”。另一个问题:您应该测试 sscanf 返回的值,以确保它填充了所需数量的对象。


您也可以将第一个整数读取为整数,将 position 更改为 int 并使用 %d 而不是 %s .

编辑

为了让自己清楚,我的建议是:

int position;
sscanf(line, "%d\t%[^\n]", &position, activity);

关于c - 如何从 txt 文件中读取制表符分隔的字符串并将它们放入变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10908668/

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