Помогите с прогой на СИ

Titus

Помогите с прогой на СИ,
эта функция добавления звена, добавляет в конец. а должен перед первым звеном, у которого слово больше по длине.

struct list * AddNode(struct list *L, struct list *node){
struct list *Ltemp=L,*K;

if(Ltemp==NULL)
L=node;
else{
K=L->next;
if(strcmp(Ltemp->slovo,node->slovo)>0) {
node->next=L;
return node;
}
while(K->next->next!=NULL){
if(strcmp(K->slovo,node->slovo)>0){
Ltemp->next=node;
node->next=K;
}
else {
Ltemp=Ltemp->next;
K=K->next;
}
}
}
return L;
}



Должен удалять звено с данным словом, но что то вообще не работает
struct list * removeNode(struct list *L,char *str){
struct list *P=L,*K;
if (L=NULL) return L;
K=L->next;
if(!strcmp(P->slovo,str {
L=L->next;
free(P);
return L;
}
while(K->next->next!=NULL){
if(!strcmp(K->slovo,str{
P->next=K->next;
L=P;
free(K);
}
else {P=P->next; K=K->next;}
}

return L;
}

этот фрагмент должен сохранить измененный список! а он что то не работат? ->

while(L->next->next!=NULL){
fprintf(fp,L->slovo);
fprintf(fp," ");
fprintf(fp,L->perevod);
fprintf(fp,"\n");
L=L->next;
}

Помогите пожалуйста! :confused:

k11122nu

отладчик использовал?

abramenkomv

fprintf(fp, "%s ", L->slovo);
С L->perevod аналогично

abramenkomv

while(L->next->next!=NULL){
И что это за дурацкое условие? Как минимум оно не логично, и если у тебя получится, что L->next == NULL, то ты получишь в итоге Segmentaion Fault.
Логичнее было бы писать

while(L) {

abramenkomv

if (L=NULL) return L;
А такие ошибки надо просто знать наизусть и не допускать.
if (L==NULL) return L;
(нужны два знака ровно)

Titus

Спасибо! решение уже нашлось! Столько ошибок

soldatiki

А такие ошибки надо просто знать наизусть и не допускать.
if (L==NULL) return L;
(нужны два знака ровно)
а разве на это не выдается предупреждения? если нет, то нужно использовать с++, там компилятор на такие вещи ругается ворнингами, нужно писать if a=b - двойные скобки.
Оставить комментарий
Имя или ник:
Комментарий: