我有一个代码,我想我做的一切都是正确的。谁能告诉我它为什么不起作用?
即使它说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 :(得分:2)
您使用的编译器(可能是早于VS 2013的MSVC版本)不允许声明与C模式中的语句混合。
使用VS 2013或更高版本的MSVC编译程序,将GCC与-std=gnu99
一起使用,或确保声明始终位于块的开头。另一种选择可能是将程序编译为C ++(只需将扩展名更改为.cpp
)。