【发布时间】:2021-05-12 21:23:08
【问题描述】:
所以我想操作另一个列表中的链表; 这是结构
typedef struct liste_fav
{
signed char numf[20];
struct liste_fav *suiv;
}liste_fav;
/***********************************/
typedef struct abonnes
{
signed char num_c[20];
signed char operateur [20];
signed char profil[20];
int credit;
liste_fav liste;
struct abonnes *adr;
}abonnes;
问题是我有一个程序不起作用,它编译但每次返回null,它的功能是搜索指向指定数字(num)的指针 acces_num 遍历列表,直到找到我们正在搜索的数字或直到 NULL ,在主程序中,我将通过(如果 point==NULL 则未找到数字)来检查它
liste_fav *acces_num(abonnes *p, signed char *num)
{
liste_fav *point= &(p->liste);
while ((point != NULL) && (numero_fav(point)!=num ))
{
point= suivant_fav(point);
}
return(point);
}
numero_fav : 给出 liste_fav 元素内的数字 suivant_fav : 给出下一个元素
signed char * numero_fav( liste_fav *p)
{
return (p ->numf);
}
liste_fav *suivant_fav(liste_fav *p)
{
return (p->suiv);
}
你能告诉我错误在哪里!!
【问题讨论】:
-
你需要解释一下“不起作用”是什么意思。这是否意味着它不编译?它给出了错误的答案?运行时会崩溃吗?它永远不会回来?
-
你的
acces_num函数实际上从不检查任何特定的数字......它只是继续遍历列表直到它到达末尾,并返回 NULL(如果最后一个节点的suiv为 NULL,至少) -
你是对的 Dmitri ,但是如何解决呢?
-
在您的 while 循环中,将节点中的数字与您正在检查的数字进行比较,如果它们匹配,则返回指针。由于您对所有内容都使用字符串,因此您可能希望在比较之前将两者都转换为数字(对于
num参数,在进入循环之前只执行一次) -
@Dmitri 你是说这个吗:liste_fav *acces_num(abonnes *p, signed char *num) { liste_fav *point= &(p->liste); while (point != NULL) { if (strcmp(num,numero_fav_propre(point))==0) return (point);否则返回 NULL ;点=suivant_fav_propre(点); } }