我的代码不会编译,为什么?

时间:2015-01-04 07:53:11

标签: c compiler-errors

我有一个代码,我想我做的一切都是正确的。谁能告诉我它为什么不起作用? 即使它说error C2065: 'a' : undeclared identifier和许多错误(总共102)这样。我已将它们声明为a = 0.

它有什么问题?

PS:解释性句子是用我的当地语言写的,根本不介意。

#include <stdio.h>//kutuphane ekleniyor
#include <windows.h>//kutuphane ekleniyor

struct OGRENCI {//ogrenci struct yapisi tanimlaniyor
    char isim[15];//struct yapisi degiskenleri
    int vize;//struct yapisi degiskenleri
    int final;//struct yapisi degiskenleri
    char bolum[15];//struct yapisi degiskenleri
}kisi[10],yedek[10],silinecek[10];//struct yapisina kisi ve yedek isimleri veriliyor

void kayit_ekle();//fonksiyonlar tanimlaniyor
void ara_bul();//fonksiyonlar tanimlaniyor
void listele();//fonksiyonlar tanimlaniyor
void bul_degistir();//fonksiyonlar tanimlaniyor
void kayit_sil();//fonksiyonlar tanimlaniyor
char menu();//fonksiyonlar tanimlaniyor
int sayac;//global bir sayac eklendi kisi syisini bulmak icin

main()
{//ana fonksiyon
    char secim;//secim adinda bir degisen tanimlaniyor
    do {
        secim=menu();//menuden gelen tus algilaniyor
        switch(secim)//menuden gelen veriyi karsilastirmaya sokuyor
        {
            case '1': kayit_ekle();break;//menuden gelen veri 1 ise kayit ekleme fonksiyonu cagiriliyor
            case '2': listele();break;//menuden gelen veri 2 ise listeleme fonksiyonu cagiriliyor
            case '3':ara_bul();break;//menuden gelen veri 3 ise arabul fonksiyonu cagiriliyor
            case '4':bul_degistir();break;//menuden gelen veri 4 ise buldegistir fonksiyonu cagiriliyor
            case '5':kayit_sil();break;//menuden gelen veri 5 ise kayit silfonksiyonu cagiriliyor

        }
    } while(secim<='5' && secim>='1');//karsilastirma menuden gelen verilerin 1 ile 5 arasinda ise
}//ana fonksiyon sonu

char menu(){//menu fonksiyonu
    char tus;//tus adinda char tipinde degisken tanimlaniyor
    printf("1-kayit ekle\n2-listele\n3-arabul\n4-buldegistir\n5-sil\n");//manu secenekleri ekrana yazdiriliyor
    tus=getch();//kullanicinin girdigi tus algilaniyor
    return tus;//menu fonksiyonunun cagirildigi yere kullanicinin girdigi tus dönduruluyor
}//menu fonksiyonu sonu

void kayit_ekle(){//kayit ekleme fonksiyonu
    char tus2;//tus2 adinda char tipinde degisken tanimlaniyor
    FILE *dosya;//file tipinde bir dosya adinda bir pointer tanimlaniyor
    dosya=fopen("a.txt","w");//dosya önceki verilerin ustune yazmak icin aciliyor

    do{
        printf("%d.kisi adi giriniz",sayac+1);//kullanicidan isim isteniyor
        scanf("%s",kisi[sayac].isim);//kullanicini girdigi veri struct yapisina aktariliyor
        fflush(stdin);//veri degiskene aktarildiktan sonra gerekli alan bosaltiliyor
        printf("%d.kisinin bölum giriniz",sayac+1);//kullanicidan bölum isteniyor
        scanf("%s",kisi[sayac].bolum);//kullanicini girdigi veri struct yapisina aktariliyor
        fflush(stdin);//veri degiskene aktarildiktan sonra gerekli alan bosaltiliyor
        printf("%d.kisi vizesi giriniz",sayac+1);//kullanicidan vize isteniyor
        scanf("%d",&kisi[sayac].vize);//kullanicini girdigi veri struct yapisina aktariliyor
        fflush(stdin);//veri degiskene aktarildiktan sonra gerekli alan bosaltiliyor
        printf("%d.kisi finali giriniz",sayac+1);//kullanicidan final isteniyor
        scanf("%d",&kisi[sayac].final);//kullanicini girdigi veri struct yapisina aktariliyor
        fflush(stdin);//veri degiskene aktarildiktan sonra gerekli alan bosaltiliyor
        printf("yeni kayit icin e basin ve menuye dönmek icin herhangi bir tusa basin");//veriler girildikten sonra kullanicidan yeni veri girmek istermisiniz diye soruluyor
        tus2=getch();//kullanicinin girdigi karakter tus2 degiskenine aktariliyor

        fprintf(dosya,"%s\t%s\t%d\t%d\n",kisi[sayac].isim,kisi[sayac].bolum,kisi[sayac].vize,kisi[sayac].final);//veriler dosyaya yaziliyor
        sayac++;//whileicin sayac 1 arttiriliyor
    }while(tus2=='e' || tus2=='E');//eger kullanici devam etmek isterse tekrar dön
    fclose(dosya);//dosya kapatiliyor
}//kayit ekleme fonksiyonusonu

void listele(){//listele fonksiyonu
    FILE *dosya;//file tipinde bir dosya adinda bir pointer tanimlaniyor
    dosya=fopen("a.txt","r");//dosya önceki verileri okumak icin aciliyor

    int a=0;
    int i;

    while(!feof(dosya)){//dosya sonuna kadar dön
        fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//veriler dosyadan okunuyor
        a++;      //while icin a arttiriliyor
    }//dosya sonuna kadar dön sonu
    for(i=0;i<(a-1);i++)//yedek yapisinin sonuna kadar dönuluyor
        printf("%d\t%s\t%s\t%d\t%d\n",i+1,yedek[i].isim,yedek[i].bolum,yedek[i].vize,yedek[i].final);//okunan veriler ekrana yaziliyor
    fclose(dosya);//dosya kapatiliyor
}//listele fonksiyonu sonu

void ara_bul(){//arabul fonksiyonu
    char kelime[150];//kelima adinda char tipinde bir degisken tanimlaniyor
    printf("Aranacak Kelimeyi girin");//kullanicidan aranacak veri isteniyor
    scanf("%s",&kelime);//girilen veri kelime degiskenine aktariliyor
    FILE *dosya;//file tipinde bir dosya adinda bir pointer tanimlaniyor
    dosya=fopen("a.txt","r");//dosya önceki verileri okumak icin aciliyor
    int a=0,i;//degiskenler tanimlaniyor dönguler icin
    while(!feof(dosya)){//dosya sonuna kadar dön
        fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//dosyadan veriler okunup yedek yapisina aktariliyor
        a++;     //while icin a 1 arttiriliyor
    }//dosya sonuna kadar dön sonu
    for(i=0;i<(a-1);i++){//yedek yapisinin sonuna kadar dönuluyor
        if(strcmp(kelime,yedek[i].isim)==0)
        {//eger aranan kelime yedek yapisinin ismine esit ise asagidakileri yap
            printf("%d\t%s\t%s\t%d\t%d\n",i+1,yedek[i].isim,yedek[i].bolum,yedek[i].vize,yedek[i].final);//veriler ekrana yadiriliyor
        }//eger aranan kelime yedek yapisinin ismine esit ise asagidakileri yap sonu
    }//yedek yapisinin sonuna kadar dönuluyorsonu
    fclose(dosya);//dosya kapatiliyor
}//arabul fonksiyonu sonu

void bul_degistir(){//bul degisrtir fonksiyonu
    char kelime[150];
    printf("Degisecek Kisiyi girin");//degisecek kisi kulanicidan aliniyor
    scanf("%s",&kelime);//kullanicinin girdigi veri kelime degiskenine ataniyor
    FILE *dosya;//file tipinde bir dosya pointeri tanimlaniyor
    dosya=fopen("a.txt","r");//a.txt dosyasi sadece okunmak icin yaziliyor
    int a=0,i;//kullanilacak degiskenler tanimlaniyor
    while(!feof(dosya)){//dosya sonuna kadar dönuluyor baslangic
        fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//dosyadan alinan veriler yedek yapisina aktariliyor
        a++;     //yedek degiskenini her seferinde farkli gelmesi icin a her seferinde arttiriliyor
    }//dosya sonuna kadar dönuluyor sonu
    for(i=0;i<(a-1);i++){//yedek yapisina alinan verilerin isleme sokulmasi
        if(strcmp(kelime,yedek[i].isim)==0)//eger degisecek kelime yedek yapisinin ismine esit ise asagidakileri yap
        {
            printf("%dninci kisinin adini giriniz",i+1);//kullanicidan yeni isim isteniyor
            scanf("%s",yedek[i].isim);//isim yedek yapisinin degisecek kismina ataniyor
            fflush(stdin);//degiskene aktarildiktan sonra o kisim bosaltiliyor
            printf("%dninci kisinin bölumunu giriniz",i+1);//kullanicidan yeni bölum isteniyor
            scanf("%s",yedek[i].bolum);//bölum yedek yapisinin degisecek kismina ataniyor
            fflush(stdin);//degiskene aktarildiktan sonra o kisim bosaltiliyor
            printf("%dninci kisinin vizesini giriniz",i+1);//kullanicidan yeni vize isteniyor
            scanf("%d",&yedek[i].vize); //vize yedek yapisinin degisecek kismina ataniyor
            fflush(stdin);//degiskene aktarildiktan sonra o kisim bosaltiliyor
            printf("%dninci kisinin Finalini giriniz",i+1);//kullanicidan yeni final isteniyor
            scanf("%d",&yedek[i].final);//final yedek yapisinin degisecek kismina ataniyor
            fflush(stdin);//degiskene aktarildiktan sonra o kisim bosaltiliyor

        }
    }//yedek yapisina alinan verilerin isleme sokulmasi sonu
    fclose(dosya);//dosya sadece okunmak icin acilan dosya kapatiliyor

    //simdi bu kisimda degistirilen yedek yapisini a.txtnin uzerine yazarak bul degistir örnegimizi bitirecegiz
    FILE *dosya2;//file tipinde bir dosya2 pointeri tanimlaniyor
    dosya2=fopen("a.txt","w");//a.txt dosyasi önceki veriler silinecek sekilde aciliyor
    int i2;//integer tipinde for döngusu icin i2 degiskeni olusturuluyor
    for(i2=0;i2<(a-1);i2++){//yine yedek degiskeninin sonuna kadar dönuluyor
        fprintf(dosya2,"%s\t%s\t%d\t%d\n",yedek[i2].isim,yedek[i2].bolum,yedek[i2].vize,yedek[i2].final);
    }//yedek degiskeninin sonuna kadar dönme sonu
    fclose(dosya2);//acilan dosya kapatiliyor
}//bul degistir fonksiyonu sonu

void kayit_sil(){//kayit sil fonksiyonu
    char kelime[150];
    printf("Silinecek Kisiyi girin");//silinecek kisi kulanicidan aliniyor
    scanf("%s",&kelime);//kullanicinin girdigi veri kelime degiskenine ataniyor
    FILE *dosya;//file tipinde bir dosya pointeri tanimlaniyor
    dosya=fopen("a.txt","r");//a.txt dosyasi sadece okunmak icin yaziliyor
    int a=0,i=0,kacinci;//kullanilacak degiskenler tanimlaniyor
    while(!feof(dosya)){//dosya sonuna kadar dönuluyor baslangic
        fscanf(dosya,"%s%s%d%d",yedek[a].isim,yedek[a].bolum,&yedek[a].vize,&yedek[a].final);//dosyadan alinan veriler yedek yapisina aktariliyor
        a++;     //yedek degiskenini her seferinde farkli gelmesi icin a her seferinde arttiriliyor
    }//dosya sonuna kadar dönuluyor sonu

    for(i=0;i<(a-1);i++){//yedek yapisina alinan verilerin isleme sokulmasi
        if(strcmp(kelime,yedek[i].isim)==0)//eger silinmesi gereken kisi adi yedek yapisinin ismine esit ise asagidakileri yap
        {            kacinci=i;//aranan verinin kacinci oldugu bulunuyor
        }//eger silinmesi gereken kisi adi yedek yapisinin ismine esit ise asagidakileri yapsonu

    }//yedek yapisina alinan verilerin isleme sokulmasi sonu
    for(i=0;i<(kacinci);i++){//verinin bulundugu yere kadar dön
        strcpy(silinecek[i].isim,yedek[i].isim);
        //kacinciya kadar olan kisimlar silinen yapisina aktariliyor
        strcpy(silinecek[i].bolum,yedek[i].bolum);
        //kacinciya kadar olan kisimlar silinen yapisina aktariliyor
        silinecek[i].vize=yedek[i].vize;
        //kacinciya kadar olan kisimlar silinen yapisina aktariliyor
        silinecek[i].final=yedek[i].final;
        //kacinciya kadar olan kisimlar silinen yapisina aktariliyor
    }
    //verinin bulundugu yere kadar dön sonu
    for(i=(kacinci+1);i<=(a-1);i++){//silinen veriden sonrakini silinecek kismina ata
        strcpy(silinecek[i-1].isim,yedek[i].isim);//kacincidan sonra olan kisimlar silinen yapisina aktariliyor
        strcpy(silinecek[i-1].bolum,yedek[i].bolum);//kacincidan sonra  olan kisimlar silinen yapisina aktariliyor
        silinecek[i-1].vize=yedek[i].vize;//kacincidan sonra  olan kisimlar silinen yapisina aktariliyor
        silinecek[i-1].final=yedek[i].final;//kacincidan sonra  olan kisimlar silinen yapisina aktariliyor
    }//silinen veriden sonrakini silinecek kismina ata sonu


    fclose(dosya);//dosya sadece okunmak icin acilan dosya kapatiliyor

    //simdi bu kisimda degistirilen yedek yapisini a.txtnin uzerine yazarak bul degistir örnegimizi bitirecegiz
    FILE *dosya2;//file tipinde bir dosya2 pointeri tanimlaniyor
    dosya2=fopen("a.txt","w");//a.txt dosyasi önceki veriler silinecek sekilde aciliyor
    int i2;//integer tipinde for döngusu icin i2 degiskeni olusturuluyor
    for(i2=0;i2<(a-1);i2++){//yine silinecek degiskeninin sonuna kadar dönuluyor
        fprintf(dosya2,"%s\t%s\t%d\t%d\n",silinecek[i2].isim,silinecek[i2].bolum,silinecek[i2].vize,silinecek[i2].final);
    }//silinecek degiskeninin sonuna kadar dönme sonu
    fclose(dosya2);//acilan dosya kapatiliyor

}//kayitsil fonksiyonu sonu

1 个答案:

答案 0 :(得分:2)

您使用的编译器(可能是早于VS 2013的MSVC版本)不允许声明与C模式中的语句混合。

使用VS 2013或更高版本的MSVC编译程序,将GCC与-std=gnu99一起使用,或确保声明始终位于块的开头。另一种选择可能是将程序编译为C ++(只需将扩展名更改为.cpp)。