Çözüldü C "gcc.exe etkin dosyayı derle' terminated with exit code -1." hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

342746

Kilopat
Katılım
2 Haziran 2020
Mesajlar
5.441
Makaleler
10
Çözümler
84
Bir C kodunda bu hatayı alıyorum. Baktığım kadarı ile kod kaynaklı bir hata yok. Bu hatayı ya Türkçe karakter kullanınca ya da kod içinde yanlış yazımdan kaynaklanıyor. İki kere karşılaşmıştım ama çözmüştüm. Biri dosyada Türkçe karakter olması diğeri ise "main" yerine "maiin" yazmamdı. Ama bunu çözemedim. Dosya adını değiştirdim ama işe yaramadı. Siz de bir bakar mısınız?

Hata;
Ekran görüntüsü 2021-05-08 000814.png


[CODE lang="c" title="Kod"]#include <stdlib.h>
#include <stdio.h>

struct calisanlar
{

char ad[30];
char soyad[30];
int yas;
struct calisanBilgi bilgi;
};

struct calisanBilgi
{

char calistigiBirim[30];
char makam[30];
float maas;
int calistigiSene;
};

void elemanBilgiGoster(struct calisanlar x)
{
printf("%s %s %d %s %s %2.f %d\n", x.ad, x.soyad, x.yas, x.bilgi.makam, x.bilgi.calistigiBirim, x.bilgi.maas, x.bilgi.calistigiSene);
}

int main()
{

struct calisanlar calisanlarTamami[3];
int eklenecekEleman;

printf("Lutfen eklenecek eleman sayisini giriniz.\n");
scanf("%d", eklenecekEleman);

for (int i = 0; i < eklenecekEleman; i++)
{
printf("%d. elemani giriniz.\n", i + 1);
scanf("%s %s %d %s %s %2.f %d\n", calisanlarTamami.ad, calisanlarTamami.soyad, calisanlarTamami.yas, calisanlarTamami.bilgi.makam, calisanlarTamami.bilgi.maas, calisanlarTamami.bilgi.calistigiSene);
}

printf("Kaydedilen eleman bilgileri;\n");
for (int i = 0; i < eklenecekEleman; i++)
{
elemanBilgiGoster(calisanlarTamami);
}
system("pause");
return 0;
}[/CODE]
 
Çözüm
Ben geldim. :)
C:
#include <stdlib.h>
#include <stdio.h>

// struct asd{...}; yerine
// typedef struct{...}asd; yazmaya alışmalısın. Özellikle header dosyalarında struct tanımlayınca işine yarayacak.
typedef struct
{
    char makam[30];
    float maas;
    int calistigiSene;
} calisanBilgi;


typedef struct
{

    char ad[30];
    char soyad[30];
    int yas;
    calisanBilgi bilgi;
}calisanlar;


void elemanBilgiGoster(calisanlar* x) //Burada pointer kullanma sebebim ise, fonksiyona verilen struct'ın bir kopyasını daha oluşturup bellek alanı kaplamamak. Bunun yerine referans da alabilirsin.
{
    //UYARI: Fonksiyon parametresindeki pointer'a verdiğin veriyi silmeyi deneme. Tabii eğer malloc() ile oluşturduğun pointer'a ait nesneyi veriyorsan ve o nesneyi bir daha kullamayacaksan silebilirsin. Aksi halde kodun hata verir.
    printf("%s %s %d %s %f %d\n", x->ad, x->soyad, x->yas, x->bilgi.makam, x->bilgi.maas, x->bilgi.calistigiSene);
}

int main()
{

    calisanlar *calisanlarTamami = NULL; //Burada pointer kullanma sebebim dinamik olarak esneyebilen dizi tanımlamak. Kullanıcının gireceği kadar belleği ayırır.
    int eklenecekEleman;

    printf("Lutfen eklenecek eleman sayisini giriniz.\n");
    scanf("%d", &eklenecekEleman); //scanf() fonksiyonunda referans kullan, böylece değişkenin olduğu adresteki veriye erişilebilecek ve değişkenin verisi fonksiyondan değiştirilebilecektir.
    calisanlarTamami = malloc(eklenecekEleman*sizeof(calisanlar)); //Bellek allokasyonu (memory allocation -> malloc() [veya calloc(), senin tarzına bağlı.]). Fonksiyonu nasıl kullandığıma dikkat et.

    for (int i = 0; i < eklenecekEleman; i++)
    {
        printf("%d. elemani giriniz.\n", i + 1);
        scanf("%s %s %d %s %f %d", &calisanlarTamami[i].ad, &calisanlarTamami[i].soyad, &calisanlarTamami[i].yas, &calisanlarTamami[i].bilgi.makam, &calisanlarTamami[i].bilgi.maas, &calisanlarTamami[i].bilgi.calistigiSene);
        //scanf'ten \n ibaresini kaldırdım. Çünkü öyle olunca \n'den bir önceki formatta bir karakter daha ister.
    }

    printf("Kaydedilen eleman bilgileri;\n");
    for (int i = 0; i < eklenecekEleman; i++)
    {
        elemanBilgiGoster(&calisanlarTamami[i]);
    }
    free(calisanlarTamami); //Bellek alanını temizledim. Bunu unutma, yoksa kodunda açık bırakırsın.
    return 0;
}
O "calisanBilgi" struct'ının tanımını "calisanlar" struct'ının üzerinde tanımla.
Maalesef aynı hocam.

@TerabyteForever Hocam sorun çözüldü gibi. Online Compilerde herhangi bir sıkıntı yok şu an. Aslında var ama düzeltebilirim. Ancak VS Code'de hala aynı hatayı veriyor.
 
Ben geldim. :)
C:
#include <stdlib.h>
#include <stdio.h>

// struct asd{...}; yerine
// typedef struct{...}asd; yazmaya alışmalısın. Özellikle header dosyalarında struct tanımlayınca işine yarayacak.
typedef struct
{
    char makam[30];
    float maas;
    int calistigiSene;
} calisanBilgi;


typedef struct
{

    char ad[30];
    char soyad[30];
    int yas;
    calisanBilgi bilgi;
}calisanlar;


void elemanBilgiGoster(calisanlar* x) //Burada pointer kullanma sebebim ise, fonksiyona verilen struct'ın bir kopyasını daha oluşturup bellek alanı kaplamamak. Bunun yerine referans da alabilirsin.
{
    //UYARI: Fonksiyon parametresindeki pointer'a verdiğin veriyi silmeyi deneme. Tabii eğer malloc() ile oluşturduğun pointer'a ait nesneyi veriyorsan ve o nesneyi bir daha kullamayacaksan silebilirsin. Aksi halde kodun hata verir.
    printf("%s %s %d %s %f %d\n", x->ad, x->soyad, x->yas, x->bilgi.makam, x->bilgi.maas, x->bilgi.calistigiSene);
}

int main()
{

    calisanlar *calisanlarTamami = NULL; //Burada pointer kullanma sebebim dinamik olarak esneyebilen dizi tanımlamak. Kullanıcının gireceği kadar belleği ayırır.
    int eklenecekEleman;

    printf("Lutfen eklenecek eleman sayisini giriniz.\n");
    scanf("%d", &eklenecekEleman); //scanf() fonksiyonunda referans kullan, böylece değişkenin olduğu adresteki veriye erişilebilecek ve değişkenin verisi fonksiyondan değiştirilebilecektir.
    calisanlarTamami = malloc(eklenecekEleman*sizeof(calisanlar)); //Bellek allokasyonu (memory allocation -> malloc() [veya calloc(), senin tarzına bağlı.]). Fonksiyonu nasıl kullandığıma dikkat et.

    for (int i = 0; i < eklenecekEleman; i++)
    {
        printf("%d. elemani giriniz.\n", i + 1);
        scanf("%s %s %d %s %f %d", &calisanlarTamami[i].ad, &calisanlarTamami[i].soyad, &calisanlarTamami[i].yas, &calisanlarTamami[i].bilgi.makam, &calisanlarTamami[i].bilgi.maas, &calisanlarTamami[i].bilgi.calistigiSene);
        //scanf'ten \n ibaresini kaldırdım. Çünkü öyle olunca \n'den bir önceki formatta bir karakter daha ister.
    }

    printf("Kaydedilen eleman bilgileri;\n");
    for (int i = 0; i < eklenecekEleman; i++)
    {
        elemanBilgiGoster(&calisanlarTamami[i]);
    }
    free(calisanlarTamami); //Bellek alanını temizledim. Bunu unutma, yoksa kodunda açık bırakırsın.
    return 0;
}
 
Çözüm

Yeni konular

Geri
Yukarı