我的问题是程序在编译时没有显示列表中的最后一个元素。除了我接下来将提供的功能外,我有一个初始化列表的函数和另一个用于向列表添加元素的函数,它们运行得很好,现在我知道这一点的原因是,比如说我输入了4个元素,"affecher_list"函数(应该打印列表(只打印3个。如果我添加了第5个元素,"affecher_liste"函数将打印4个元素。如果我添加第6个元素,它将打印5个元素。新的最后一个元素出现在列表中,并且是其中的一部分,它只是不会被打印出来。我希望我能解释这个问题。。
typedef struct{
char nom[20];
float surface;
int habitants;
}ville;
typedef struct{
ville data;
struct element* suivant;
}element;
typedef struct{
ville* T;
}liste;
void afficher_ville(ville*v){
printf("****************info ville********************");
printf("le nom de la ville :%s n", v->nom);
printf("le nombre des habitants de la ville :%d n", v->habitants);
printf("la surface de la ville :%.2f n", v->surface);
}
void afficher_liste(liste* l)
{
if(l->T==NULL){exit(-1);}
element *aide = l->T;
int lg=0;
do
{ lg++;
afficher_ville(&aide->data);
aide= aide->suivant;
} while(aide->suivant != l->T);
printf("longeur* %dn",lg);
}
您的退出条件是下一个节点为null,并且按照您的逻辑,在最后一个节点上,您的应用程序将退出,而不是打印该节点。
中断递归,然后在退出应用程序之前手动打印最后一行,将解决此问题。
我希望这能有所帮助!