Tam Sürümünü Görmek İçin : Bu kodda hata nerde
badabim87
04/01/2007, 20:02
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <conio.h>
struct linked_list{
int d;
struct linked_list *next;};
typedef struct linked_list ELEMENT;
typedef ELEMENT *LINK;
LINK string_to_list(char s[])
{
LINK head;
if(s[0]=='\0')
return NULL;
else{
head=malloc(sizeof(ELEMENT));
head->next=string_to_list(s+1);
return head;
}}
void Print_list(LINK head)
{
if(head==NULL)
printf("NULL list");
else
printf("%c",head->d);
Print_list(head->next);
}
void delete_list(LINK head)
{
if(head!=NULL)
{
delete_list(head->next);
free(head);}
}
void insert(LINK p1,LINK p2,LINK q)
{
assert(p1->next==p2);
p1->next=q;
q->next=p2;
}
main()
{
int i,v;
char s[5];
LINK head=NULL;
for(i=0;i<5;i++)
{printf("Enter some values:");
scanf("%c",&s[i]);
}
Print_list(s);
printf("Enter some value to delete");
Print_list(s);
}
Yardımcı olursanız çok sevenirim.program print işlemi sırasında hata verio
acehreli
04/01/2007, 20:33
Hizlica gorebildiklerim:
1) Print_list icindeki ozyinelemeli Print_list cagrisini herhalde else blogundan yapmak istedin degil mi? Kume parantezleri kullanmayi unutmussun.
Genel bir kural olarak, butun kod bloklarinda kume parantezleri kullan. Tek satirlik if bloklarinda bile:
void foo()
{
if (bir_sey())
{
tek_satir_olsa_bile();
}
}
Ayrica, kapatma kume parantezlerini bugune kadar gormedigim bir sekilde kapatiyorsun. Belki de bir goruntuleme hatasidir, ama okumayi cok guclestiriyor.
Ornegin, senin kodun soyle gorunuyor:
void delete_list(LINK head)
{
if(head!=NULL)
{
delete_list(head->next);
free(head);}
}
Su sekilde duzenli olsun:
void delete_list(LINK head)
{
if(head!=NULL)
{
delete_list(head->next);
free(head);
}
}
Baska bir duzen de kullanabilirsin tabii ki ama mutlaka duzenli olsun :) Acma kume parantezini bir ust satirda kullanan baska bir duzen:
void delete_list(LINK head)
{
if(head!=NULL) {
delete_list(head->next);
free(head);
}
}
2) main icinde Print_list'e bir dizi gonderiyorsun. Halbuki Print_list bir LINK bekliyor. Herhalde once string_to_list cagrisi ile bir liste olusturmak istemissin ama unutmussun.
Ali
badabim87
04/01/2007, 20:40
Ya şimdi sanırım küme işaretçilerinde bi problem yok.Ztn program hata fln vermio ama çalıştırdıktan sora listenin ilk elemanını basıp duruoo
Kodunda cok fazla hata var...
1. Listeye ekleme yapmadan listeyi print etmeye calisiyorsun
2. void Print_list(LINK head) fonksiyonunu Print_list(s) seklinde nasıl cagirabiliyorsun anlamış deilim...(char s[5];)
3. Kodunu bir duzenle tekrar sor bence....
Kolay Gelsin
acehreli
04/01/2007, 22:18
badabim87, sen hatanin nerede oldugunu sordun, bir kac tane gosterildi... Bunun sanmayla bir ilgisi yok. Bence hata olmadigini sanmayi birak, ve hatalari duzelt.
Ali
Duzeltilmiş hali....
struct linked_list{
int d;
linked_list *next;
};
typedef linked_list ELEMENT;
typedef ELEMENT *LINK;
LINK string_to_list(char s[])
{
if(s[0]=='\0')
return NULL;
else{
LINK head=(LINK)malloc(sizeof(ELEMENT));
head->d=s[0]; // Revne: Veri Yukleniyor
head->next=string_to_list(s+1);
return head;
}
}
void Print_list(LINK head)
{
if(head==NULL)
return;//printf("NULL list");//Revne: Eger eleman yoksa yada listenin sonuna geldiginde fonksiyon yazmadan donecek
else
{
printf("%c",head->d);
Print_list(head->next);
}
}
int main()//Revne:main her zaman int dondurur
{
char s[5];
printf("Enter some values:");
scanf("%5s",s); //Revne: 5 degeri sen 5 dedigin icin... bence bunu #define ile sabitle
LINK head=string_to_list(s);//Revne: Liste Olusturuluyor
printf("Values in List:");
Print_list(head);//Revne: Liste yazdırılıyor
return 0; //Revne: main deger donduruyor
}
Kolay Gelsin
badabim87
05/01/2007, 11:31
Saolun hepinize teşekkkürler!!
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.