C De Dosyalama Ödevi
-
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<locale>
struct ogrenci
{
char * isim;
char * soyisim;
int no;
};
void menu()
{
int secim;
printf("1.ogrenci kaydi\n");
printf("2.ogrenci arama\n");
printf("3.cikis\n");
printf("lütfen seciminizi giriniz\n");
scanf("%d",&secim);
}
typedef ogrenci fatih;
void oku()
{
fatih okunan;
FILE*fp=fopen("kayit.txt","a");
okunan.isim=(char*)malloc(sizeof(char)*100);
printf("ismini giriniz\n");
scanf("%s",&okunan.isim);
okunan.isim=(char*)malloc(sizeof(char)*100);
printf("soyismi giriniz\n");
scanf("%s",&okunan.soyisim);
okunan.isim=(char*)malloc(sizeof(char)*100);
printf("no giriniz\n");
scanf("%s",&okunan.no);
fprintf(fp,"%s %s %d\n",okunan.isim,okunan.soyisim,okunan.no);
fclose(fp);
}
void ara()
{
printf("aranan ogrencinin ismini giriniz");
char aranan[30];
scanf("%s",aranan);
FILE*fp=fopen("kayit.txt","r");
fatih okunan;
okunan.isim=(char*)malloc(sizeof(char)*100);
while(!feof(fp))
{
fscanf(fp,"%s %s %d",okunan.isim,okunan.soyisim,okunan.no);
if(strcmp(okunan.isim,aranan)==0)
{
printf("%s %s %d\n",okunan.isim,okunan.soyisim,okunan.no);
}
}
fclose(fp);
}
int main()
{
/* typedef ogrenci xyz;*/
setlocale(LC_ALL,"TURKISH");
int secim;
do{
menu();
switch(secim)
{
case 1: { oku(); break; }
case 2: { ara(); break; }
case 3: { goto son; }
}
}while(secim==3);arkadaşlar bu kod la uğraşıorumm bn bi yanlış göremedim ama seçim yaptktan sonra patlıo açıkcası bi de siz baksanız
-
kont239 bunu yazdı:
-----------------------------
#include
#include
#include
#include
#include
struct ogrenci
{
char * isim;
char * soyisim;
int no;
};
void menu()
{
int secim;
printf("1.ogrenci kaydi\n");
printf("2.ogrenci arama\n");
printf("3.cikis\n");
printf("lütfen seciminizi giriniz\n");
scanf("%d",&secim);
}
typedef ogrenci fatih;
void oku()
{
fatih okunan;
FILE*fp=fopen("kayit.txt","a");
okunan.isim=(char*)malloc(sizeof(char)*100);
printf("ismini giriniz\n");
scanf("%s",&okunan.isim);
okunan.isim=(char*)malloc(sizeof(char)*100);
printf("soyismi giriniz\n");
scanf("%s",&okunan.soyisim);
okunan.isim=(char*)malloc(sizeof(char)*100);
printf("no giriniz\n");
scanf("%s",&okunan.no);
fprintf(fp,"%s %s %d\n",okunan.isim,okunan.soyisim,okunan.no);
fclose(fp);
}
void ara()
{
printf("aranan ogrencinin ismini giriniz");
char aranan[30];
scanf("%s",aranan);
FILE*fp=fopen("kayit.txt","r");
fatih okunan;
okunan.isim=(char*)malloc(sizeof(char)*100);
while(!feof(fp))
{
fscanf(fp,"%s %s %d",okunan.isim,okunan.soyisim,okunan.no);
if(strcmp(okunan.isim,aranan)==0)
{
printf("%s %s %d\n",okunan.isim,okunan.soyisim,okunan.no);
}
}
fclose(fp);
}
int main()
{
/* typedef ogrenci xyz;*/
setlocale(LC_ALL,"TURKISH");
int secim;
do{
menu();
switch(secim)
{
case 1: { oku(); break; }
case 2: { ara(); break; }
case 3: { goto son; }
}
}while(secim==3);arkadaşlar bu kod la uğraşıorumm bn bi yanlış göremedim ama seçim yaptktan sonra patlıo açıkcası bi de siz baksanız
-----------------------------hoca bilen yok mu yha bi bakın !
-
secim i okumayı menu() fonksiyonunda yapmışsın onu sonradan mainde kullanamassın .En iyisi secim i main içinde oku .Bide goto niye kullanıyosun ki onun yerine return 0; yazsan direk biter zaten program
-
seretide bunu yazdı:
-----------------------------
secim i okumayı menu() fonksiyonunda yapmışsın onu sonradan mainde kullanamassın .En iyisi secim i main içinde oku .Bide goto niye kullanıyosun ki onun yerine return 0; yazsan direk biter zaten program
-----------------------------hoca fonk. da secim var main de de var görmemşsin sanırım
-
kont239 bunu yazdı:
-----------------------------
seretide bunu yazdı:
-----------------------------
secim i okumayı menu() fonksiyonunda yapmışsın onu sonradan mainde kullanamassın .En iyisi secim i main içinde oku .Bide goto niye kullanıyosun ki onun yerine return 0; yazsan direk biter zaten program
-----------------------------hoca fonk. da secim var main de de var görmemşsin sanırım
-----------------------------gördüm ama 2 secimde farklı değişkenler.Sen main de ne idüğü belirsiz bi değişkene erişmeye çalışıyosun programda hata veriyo.
-
hocam main()deki secim değişkeni ile menu()'daki secim değişkenleri aynı şeyler değiller, ikisi de lokal değişken, ya global kullan ya da menü seçimini main()de okuyup onu menu()'ye ver ve orada kontrol ettir.
şöyle olabilir
int menu()
{
int secim;
printf("1.ogrenci kaydi\n");
printf("2.ogrenci arama\n");
printf("3.cikis\n");
printf("lütfen seciminizi giriniz\n");
scanf("%d",&secim);
return secim;
}int main()
{
setlocale(LC_ALL,"TURKISH");
int secim;secim = menu();
do{
switch(secim)
{
case 1: { oku(); break; }
case 2: { ara(); break; }
case 3: { goto son; }
}
}while(secim==3); -
xcoder konuya el atmis zaten fakat bi mantik hatasi algiladim onu belirtmek istiyorum.
do-while dongunde ki sorgun, secim 3'e esitse seklinde. yani programin tekrar menuyu gostermesi icin secim'in 3'e esit olmasi gerekiyor fakat sen,
secim eger 3'e esitse, yani case 3: durumunda programi 'son' diye tabir ettigin fakat etiketi kodda goremedigim bi noktaya ziplatiyosun. Ismine dayanarak cikardigim sonuc, 'son' noktasinin programi sonlardirmak icin asagi noktalarda bi yerde oldugu.
eger secim 3'e esitse cikilicaksa, bence while'in icinde sormamiz gereken sey, secimin 3'e esit olmadigidir.[ while(secim != 3) ]ve eger programi sonlandirmadan once 'son' noktasina ziplamanin belli bir amaci yoksa ( ornegin; dinamik kullandigin bellekleri geri vermek, kayit yapmak, verileri kontrol etmek vsvs.) ziplamadan cikis yapman daha uygun olur. (seretide'nin de dedigi gibi, return 0 olaabilir.)
