2015-01-04 3 views
-4

У меня есть код, и я думаю, я все сделал правильно. Может ли кто-нибудь сказать мне, почему он не работает? Даже он говорит 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 
+0

Пожалуйста, отформатируйте свой код ... – SMA

+1

[MCVE] (http://stackoverflow.com/help/mcve) было бы неплохо. –

+0

этот вопрос будет помечен как не по теме, напишите свой вопрос здесь http://codereview.stackexchange.com/ – sashas

ответ

2

Вы используете компилятор (вероятно, версия MSVC старше с VS 2013), что не позволяет заявления смешан с заявлениями в режиме C.

Любой компилятор вашей программы с MSVC с VS 2013 или более поздней версии, используйте GCC с -std=gnu99 или убедитесь, что ваши объявления всегда находятся в начале блока. Другой альтернативой может быть компиляция программы как C++ (просто измените расширение на .cpp).

Смежные вопросы