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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…