gpt4 book ai didi

c - 我的代码无法编译,为什么?

转载 作者:行者123 更新时间:2023-11-30 21:21:13 24 4
gpt4 key购买 nike

我有一个代码,我想我做的一切都是正确的。谁能告诉我为什么它不起作用?即使它说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

最佳答案

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

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

关于c - 我的代码无法编译,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com