C 单链接列表输出

C 单链接列表输出,c,list,linked-list,C,List,Linked List,我编写了以下代码,将一些名称从文本文件复制到单个链接列表中, 姓名必须按字母顺序打印,并显示频率。 但是在输出中,我在姓氏之前得到了一些不在文本文件中的奇怪字符。 谁能告诉我为什么 主要 一个简单的解决方案: while(1) { word = (char *)malloc(100); if(word==NULL) { fprintf(stdout,"Eroare la alocarea memoriei!"); exit(-1);

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

主要

一个简单的解决方案:

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);

}
while(1)
{
单词=(字符*)malloc(100);
if(word==NULL)
{
fprintf(标准语,“爱你的回忆!”);
出口(-1);
}
int retValue=fscanf(fin,“%s”,字);
如果(返回值<0)
打破
p=(tip_nod*)malloc(sizeof(tip_nod));
if(p==NULL)
{
fprintf(标准为“爱的回忆”);
出口(-2);
}
p->nume=word;
creare_lista(&prim,&ultim,p);
}

而(!feof(fin))
->这就是原因。您需要在读取后检查EOF,而不是在读取前检查。我看不到您的代码有任何差异。但如果我这样做,在读取一个单词后,while循环将停止,我的链接列表将被删除empty@sixfeet
fscanf
仅在发生错误时返回小于
0
的值。如果是这样,那么你的输入就有问题了。
#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);

}