Kod sonsuz döngüye giriyor

SuppleWaif7

Hectopat
Katılım
9 Şubat 2020
Mesajlar
852
Çözümler
4
Kodumdaki hata nedir ? sonsuz loop'a düşüyor.
Kod:
#include <stdlib.h>

#include <stdio.h>



struct node{



int data;



struct node *next;



};



struct node *start;

struct node *temp;

struct node *iter;



void sonaeleman(int veri){



struct node* sonaekleme=(struct node*)malloc(sizeof(struct node));



sonaekleme->data=veri;

sonaekleme->next=NULL;



if(start==NULL){



    start=sonaekleme;

}

    else{



       while(iter->next!=NULL){



              iter=iter->next;

              iter->next=sonaekleme;





       }



    }







}



void basaeleman(int basveri){



struct node* basaekleme=(struct node*)malloc(sizeof(struct node));

basaekleme->data=basveri;

basaekleme->next=start;//basa eklenecegi icin yeni start bu olacak

start=basaekleme;



}



void print(){

iter=start;



while(iter->next!=NULL){



    printf("%d",iter->data);

    iter=iter->next;



}

printf("%d ",iter->data);





}





int main(){

int secim,basa,sona;



printf("Bir secim yapiniz\n");

printf("1-Sona eleman ekleme\n");

printf("2-Basa eleman ekleme ");

scanf("&d",&secim);



switch(secim){



case 1: printf("Sona eklemek istediginiz sayi: ");

scanf("%d ",sona);

sonaeleman(sona);

print();



break;

case 2: printf("Basa eklemek istediginiz sayi: ");

scanf("%d ",&basa);

basaeleman(basa);

print();



break;

default: printf("Yanlis bir secim yaptiniz..");

}





print();

return 0;

}
 
Son düzenleme:
Sonsuz döngüye giriyor çünkü While'ı kıracak bir şey yazmamışsın ki? While verilen ifade bozulana kadar kendini tekrar eder. Senin while'ın içinde eğer 1==1 yazıyor. Bu döngüyü kıracak hiç bir şey yok. Bir de while içinden nasıl veri çekip switch'e aktarmayı düşünüyordun onu da bilmiyorum.
 
64. satırda while sonsuz döngüye girmiş 1 her zaman 1'e eşit olacağı için hiçbir zaman çıkmayacak hep içindeki kodu tekrar edecek. While'ın içinde de sadece printf kullanmışsın yani sonsuza kadar ekrana yazı yazdıran bir kod haline gelmiş.

C:
#include <stdlib.h>
#include <stdio.h>

struct node
{

    int data;

    struct node *next;
};

struct node *start;
struct node *temp;
struct node *iter;

void sonaeleman(int veri)
{

    struct node *sonaekleme = (struct node *)malloc(sizeof(struct node));

    sonaekleme->data = veri;
    sonaekleme->next = NULL;

    if (start == NULL)
    {

        start = sonaekleme;
    }
    else
    {

        while (iter->next != NULL)
        {

            iter = iter->next;
            iter->next = sonaekleme;
        }
    }
}

void basaeleman(int basveri)
{

    struct node *basaekleme = (struct node *)malloc(sizeof(struct node));
    basaekleme->data = basveri;
    basaekleme->next = start; //basa eklenecegi icin yeni start bu olacak
    start = basaekleme;
}

void print()
{
    iter = start;

    while (iter->next != NULL)
    {

        printf("%d", iter->data);
        iter = iter->next;
    }
    printf("%d ", iter->data);
}

int main()
{
    int deger;
    while (1 == 1)
    {
        printf("Bir secim yapiniz\n");
        printf("1-Sona eleman ekleme\n");
        printf("2-Basa eleman ekleme\n");
        deger = getchar();

        switch (deger)
        {

        case '1':
            printf("Sona eklemek istediginiz sayi: ");
            scanf("%d ", &deger);
            sonaeleman(deger);
            print();

            break;
        case '2':
            printf("Basa eklemek istediginiz sayi: ");
            scanf("%d ", &deger);
            basaeleman(deger);
            print();

            break;
        default:
            printf("Yanlis bir secim yaptiniz..");
        }
    }

    return 0;
}

Şu şekilde biraz düzenledim ama daha fazla uğraşman lazım gibi duruyor kodla.
 
Son düzenleme:
While oluşturup içine scanf() atmamışsın. Sürekli printf() gerçekleşiyor. Scanf() atsan da kullanıcı veri girdiğinde yine soruyu soracak. Veriyi kullanmayacak.
 

Geri
Yukarı