gpt4 book ai didi

c - 单链表输出

转载 作者:行者123 更新时间:2023-11-30 15:32:47 25 4
gpt4 key购买 nike

我编写了以下代码,将一些名称从文本文件复制到单个链接列表,并且名称必须按字母顺序打印并显示频率。但在输出中,我在姓氏之前得到了一些文本文件中没有的奇怪字符。谁能告诉我为什么?

主要内容

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "alfa.h"

void main()
{
tip_nod *prim, *ultim;
tip_nod *p;
char *word;
FILE *fin;

prim = ultim = NULL;

fin = fopen("alf.txt", "r");
if(!fin)
{
perror("\nEroare la deschiderea fisierului");
exit(-1);
}

while(!feof(fin))
{
word = (char *)malloc(100);
if(word==NULL)
{
fprintf(stdout,"Eroare la alocarea memoriei!");
exit(-1);
}
fscanf(fin, "%s", word);
p = (tip_nod*)malloc(sizeof(tip_nod));
if(p==NULL)
{
fprintf(stdout, "Eroare la alocarea memoriei p");
exit(-2);
}
p->nume = word;
creare_lista(&prim, &ultim, p);

}
afisare(prim);
}

ALFA.C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "alfa.h"


void creare_lista(tip_nod **prim, tip_nod **ultim, tip_nod *p)
{
tip_nod *q, *q1;
p->urm = NULL;
p->frec = 1;
if((*prim)==NULL)
{
(*prim)= (*ultim) = p;
}
else
{
q = *prim;
q1 = NULL;
while((q!=NULL) && (strcmp(q->nume,p->nume))<0)
{
q1 = q;
q = q->urm;
}
if(q!=NULL)
{
if(strcmp(p->nume, q->nume)==0) (q->frec)++;
if(strcmp(q->nume, p->nume)>0)
{
if(q1==NULL)
{
p->urm = (*prim);
(*prim) = p;
}
else
{
p->urm = q1->urm;
q1->urm = p;
}
}
}
else
{
(*ultim)-> urm = p;
(*ultim) = p;
}
}
}

void afisare(tip_nod *prim)
{
tip_nod *p;


if(prim==NULL)
{
printf("\nLista este vida!");
return(-1);
}
else
{
p = prim;
while(p!=NULL)
{
fprintf(stdout,"%s : %d ",p->nume, p->frec);
p = p->urm;
}
}
}

头文件

#ifndef ALFA_H_INCLUDED
#define ALFA_H_INCLUDED

typedef struct tip_nod
{
char *nume;
int frec;
struct tip_nod *urm;
}tip_nod;

void creare_lista(tip_nod **prim, tip_nod **ultim, tip_nod *p);
void afisare(tip_nod *);


#endif // ALFA_H_INCLUDED

最佳答案

一个简单的修复:

while(1)
{
word = (char *)malloc(100);
if(word==NULL)
{
fprintf(stdout,"Eroare la alocarea memoriei!");
exit(-1);
}
int retValue = fscanf(fin, "%s", word);
if(retValue < 0)
break;
p = (tip_nod*)malloc(sizeof(tip_nod));
if(p==NULL)
{
fprintf(stdout, "Eroare la alocarea memoriei p");
exit(-2);
}
p->nume = word;
creare_lista(&prim, &ultim, p);

}

关于c - 单链表输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24068789/

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