gpt4 book ai didi

c - 我如何忽略 c 中 .txt 文件中的换行符

转载 作者:太空宇宙 更新时间:2023-11-04 08:19:47 29 4
gpt4 key购买 nike

我正在从一个文本文件中读取并将每个元素存储到一个链表中。但是,当程序到达返回字符或换行符时,程序会返回错误。

从文本文件中读取并存储到结构中。当我将每个结构打印到屏幕上时,我注意到错误,程序在返回字符之前打印最后一个结构,然后退出。

int main(int argc, const char * argv[]) {
printf("Hello!\n");

char filename[] = "artist.txt";

print_artists(read_artists(filename));

return 0;
}

struct artist *read_artists(char *fname)
{
int maxlen = 225;

int artid = 0;
int altartid = 0;
int pc = 0;
char artname[80];

char data[maxlen];
int valid = 0; // 0 acts as true 1 acts as false
int checkresult = 0; //checks result of sscanf

struct artist *temphead = create_artist(0,0,0,"0");

FILE *fp = fopen(fname ,"r");

if (fp != NULL)
{
while (fgets(data,maxlen,fp))
{
checkresult = sscanf(data,"%d\t%[^\t\n]\n",&artid,artname);
if (checkresult == 2)
{
struct artist *b = NULL;
b = create_artist(artid,altartid,pc,artname);
temphead = add_artist(temphead,b);
}
else
{
printf("error checkresult = %d\n",checkresult);
printf("break out of loop valid = 1\n");
valid = 1; // acts as boolean variable
break; //breaks out of the while(fgets)
}
}
fclose(fp);
return (temphead);
}
else
{
fclose(fp);
printf("File Error\n");
return (NULL);
}

}

void print_artists(struct artist *head)
{
if (head != NULL)
{
struct artist *temp = head;
while (temp -> next != NULL)
{
print_artist(temp);
temp = temp -> next;
}
print_artist(temp);
}
}

这是输出

enter image description here

我正在阅读的文本文件

enter image description here

最佳答案

当您到达 Bodenstandig 之前的空白行时,sscanf 将不匹配,您将在“break”处退出 while 循环。

如果 sscanf 没有返回 2,您应该检查该行是否为空,如果是,则跳过并阅读下一行。或者只是跳过检查并忽略坏行。 while(fgets(...) 条件将在文件末尾变为假,因此您不需要在错误行上退出。

if (checkresult == 2)
{
....
}
else
{
continue; // will go back to top while(fgets(...))
}

关于c - 我如何忽略 c 中 .txt 文件中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33922178/

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