Ben bir program yazmaya caliştim fakat hata aldım,sorunu düzeltebilir misiniz?amacım telefon defteri programı yapmak yardımcı olursanız sevinirim..
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
void rehber();
void rehbere_ekle();
void rehberi_gor();
int secim=0;
void main(void)
{
rehber();
}
void rehber()//tel rehberi ana menüsü
{
while(secim!=NULL)
{
printf("rehber menusu==>\n\n1-new contact\n2-see contacts\n3-main menü\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("yapmak istediginiz islemi seciniz\n");
secim=getche();
system("cls");
switch(secim)
{
case '1':rehbere_ekle();break;
case '2':rehberi_gor();break;
case '3':secim=NULL;break;
default:printf("yanlis secim\n\n");
}
}
}
void rehbere_ekle()//rehbere yeni giris
{
struct rehber
{
char isim[20];
char soy_isim[20];
char number[20];
};
struct rehber giris;
FILE *fptr;
int onay=0,tus;
system("cls");
puts("enter name");
while (onay==0)
{
gets(giris.isim);
if(strlen(giris.isim)>20)
{
puts("you enter more than 20 charachters please try again");
onay=0;
}
else onay=1;
}
onay=0;
puts("enter sorname");
while (onay==0)
{
gets(giris.soy_isim);
if(strlen(giris.soy_isim)>20)
{
puts("you enter more than 20 charachters please try again");
onay=0;
}
else onay=1;
}
onay=0;
puts("enter number");
while (onay==0)
{
gets(giris.number);
if(strlen(giris.number)>20)
{
puts("you enter more than 20 charachters please try again");
onay=0;
}
else onay=1;
}
printf("\n%s %s %s",giris.isim,giris.soy_isim,giris.number);
puts("\n\nif the text is true press 1 to save or any key to turn back to menu");
tus=getche();
if (tus=='1')
{
if ((fptr=fopen("kayit.doc","a"))!=NULL)
{
fwrite(&giris,sizeof(giris),1,fptr);
fclose(fptr);
}
else puts("eror opening file");
}
}
void rehberi_gor()//rehberi görmeye yarar
{
struct rehber
{
char isim[20];
char soy_isim[20];
char number[20];
};
struct rehber giris;
FILE *fptr;
system("cls");
if((fptr=fopen("kayit.doc","r"))==NULL)
{
printf("Error opening file\nNo such that file\nPress enter to continue\n");
}
else
{
while(fread(&giris,sizeof(giris),1,fptr)!=NULL)
printf("%s %s %s\n",giris.isim,giris.soy_isim,giris.number);
}
puts("press enter to continue");
getch();
return 0;
}
HATA !
OP Yeni Üye
Teşekkür Sayısı: 0
24 mesaj
Kayıt Tarihi:Kayıt: Ağu 2009
OP Yeni Üye
Teşekkür Sayısı: 0
24 mesaj
Kayıt Tarihi:Kayıt: Ağu 2009
Sanırım kimse cevap vermicek.Boyle bir forum sitesinden beklemezdim.
Üye
Teşekkür Sayısı: 0
53 mesaj
Kayıt Tarihi:Kayıt: Oca 2010
0 da bir NULL karakteri olduğu için döngüye girmeden sonlanıyor program. Bu yüzden başlangıç değeri olarak başka bir değer vermelisin secim e. Örneğin secim = 7 veya başka bir şey atayabilirsin.O zaman sorunsuz çalışacaktır.
daha iyi bir user-interface için void rehber() fonksiyonu şöyle düzenlenebilir.
- [ Tüm kodu seç ] [ Yeni Pencerede Göster ]
void rehber()//tel rehberi ana menüsü { while(secim != 'q' || secim != 'Q') /* değiştirdiğim satır */ { printf("rehber menusu==>\n\n1-new contact\n2-see contacts\n3-main menü\nq-to quit\n\n"); printf("yapmak istediginiz islemi seciniz\n"); secim=getche(); system("cls"); switch(secim) { case '1': rehbere_ekle(); break; case '2': rehberi_gor(); break; case '3': secim=NULL; break; /* şu satırları ekledim */ case 'q': case 'Q': exit(1); default: printf("yanlis secim\n\n"); } } }
zira kullanıcı NULL karakterinin ne olduğunu bilmeyebilir veya çıkmak için NULL karakterini gireceğini.Menuye q to quit die bir secenek ekledim.Kullanıcı 'q' veya 'Q' girdiğinde programdan çıkacaktır.
anlamadığınız bir yer olursa sorabilirsiniz.
Son Düzenleme: endazyar ~ 15 Mayıs 2010 09:19