텍스트 파일에서 단일 링크 목록으로 일부 이름을 복사하려면 다음 코드를 작성하십시오. 및 이름은 사전 순으로 인쇄해야하며 빈도도 표시해야합니다. 그러나 출력에서 텍스트 파일에없는 성 앞에 성가신 일부 문자가 표시됩니다. 누구나 그 이유를 말해 줄 수 있습니까?단일 링크 목록 출력
주요
#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
'동안 (FeO의 f (fin))'-> 이것이 이유입니다. 읽은 후에 EOF를 확인해야합니다. –
같은 결과입니다. – sixfeet
코드에 차이가 보이지 않습니다. –