C De Switch Case Yardım
-
#include <stdio.h>
int main ()
{
int puan;
int aSay=0,bSay=0,cSay=0,dSay=0,eSay=0,fSay=0;
printf("Harf Notlarini Giriniz\n");
printf("Cikis icin EOF karakterlerini Girin\n");
while((puan = getchar()) != EOF)
{
switch (puan)
{
case 'A':case'a':
++aSay;
break;
case 'B':case'b':
++bSay;
break;
case 'C':case'c':
++cSay;
break;
case 'D':case'd':
++dSay;
break;
case 'E':case'e':
++eSay;
break;
case 'F':case'f':
++fSay;
break;
default:
printf("Yanlis Bir Tuslama Yaptiniz\nTekrar Giriniz\n");
break;
}
}
printf("Her Harf Icin Toplam Sayi\n");
printf("A:%d\n",aSay);
printf("B:%d\n",bSay);
printf("C:%d\n",cSay);
printf("D:%d\n",dSay);
printf("E:%d\n",eSay);
printf("F:%d\n",fSay);
return 0;
}
-------------------------------
EOF yazdımgımda çıkmıyor.AdanF ye herhangi bir harf girdigimde 'Yanlis Bir Tuslama Yaptiniz.Tekrar Giriniz' diyor. Başka bir harf girince gene aynısı oluyor.
Deitelin kitabındakinin aynısı bu. Ona copy paste yaptım gene aynı hatalar. Nerde yanlış yapıyorum ? -
eof karakteri eof yazmak değil ctrl ve z tuşlarına aynı anda bastığında çıkan "^Z" dir. Soruna da bakıyorum şimdi.
Edit: her case ++Say; ve break; diye 2 satırlık işlem yapıyo. Bu satırları {} içine almadığından olabilirmi?
ekleme: aynen int değişkende char tutuyosun :D
wasd tarafından 14/Oca/13 23:54 tarihinde düzenlenmiştir -
puanı char yap
-
wasd bunu yazdı
eof karakteri eof yazmak değil ctrl ve z tuşlarına aynı anda bastığında çıkan "^Z" dir. Soruna da bakıyorum şimdi.
Edit: her case ++Say; ve break; diye 2 satırlık işlem yapıyo. Bu satırları {} içine almadığından olabilirmi?
case den öncede aldım sonrada aldım {} içine her case break leri gene aynı
{case ++say break;}
case { ++say break;}
-
case den çıktığında flush yapman gerek
while bitmeden
fflush(stdin);
ekle.(charla akalası yokmus)
-
hocam kafam şişik biraz da ne yapmak istediğini anlamadım.. ya kitaptaki yazıyı göster ya da amacı söyle..
EOF demişsin okunan karakterleri puan a eşitlemişsin türüne int demişsin.. bi değişik geldi.
net olarak nasıl bi sonuç istediğini söylersen kodunu düzeltmeye çalışayım
-
puan'ı char yap
ve döngü başlıgını
while(scanf("%s",&puan) != EOF)
şu şekilde değiştir, ben codeblocks'ta denedim çalışıyor tabi böyle işini görürse
splintercell tarafından 15/Oca/13 00:05 tarihinde düzenlenmiştir
edit: çalışıyo dedim ama:D not eklemede sorun oldu gibi bu sefer sen yine bi dene -
AsDayGoesBy bunu yazdı
case den çıktığında flush yapman gerek
while bitmeden
fflush(stdin);
ekle.(charla akalası yokmus)
evet şimdi denedim bütün olay buymuş
peki bu fflush'ın mantığı nedir
-
#include <stdio.h>
int main()
{
char puan;
int aSay=0,bSay=0,cSay=0,dSay=0,eSay=0,fSay=0;
printf("Harf Notlarini Giriniz\n");
printf("Cikis icin EOF karakterlerini Girin\n");
while( (puan=getchar()) != EOF)
{
switch (puan)
{
case 'A':{++aSay;break;}
case 'a':{++aSay;break;}
case 'B':{++bSay;break;}
case 'b':{++bSay;break;}
case 'C':{++cSay;break;}
case 'c':{++cSay;break;}
case 'D':{++dSay;break;}
case 'd':{++dSay;break;}
case 'E':{++eSay;break;}
case 'e':{++eSay;break;}
case 'F':{++fSay;break;}
case 'f':{++fSay;break;}
default :{printf("Yanlis Bir Tuslama Yaptiniz\nTekrar Giriniz\n");break;}
}
fflush(stdin);
}
printf("Her Harf Icin Toplam Sayi\n");
printf("A:%d\n",aSay);
printf("B:%d\n",bSay);
printf("C:%d\n",cSay);
printf("D:%d\n",dSay);
printf("E:%d\n",eSay);
printf("F:%d\n",fSay);
return 0;
}edit: evet buymuş çözüm.
@nirvana: http://cboard.cprogramming.com/c-programming/21878-fflush-stdin.html
https://www.google.com.tr/search?q=fflush(stdin)
wasd tarafından 15/Oca/13 00:28 tarihinde düzenlenmiştir -
Unbalance : Butun olay switch case yapisi ile girilen notu saydirma. A B die girecez. Cikis yaptigimizda kactane a var kac tane b var onu ekrana yazdiracaz.
AsDayGoesBy: Biraz daha acabilirmisin. fflush olayini. Daha yeniyim C de -
niRvana_GG bunu yazdıUnbalance : Butun olay switch case yapisi ile girilen notu saydirma. A B die girecez. Cikis yaptigimizda kactane a var kac tane b var onu ekrana yazdiracaz.
AsDayGoesBy: Biraz daha acabilirmisin. fflush olayini. Daha yeniyim C de
Bufferda \n karakteri kaldığı için while tekrar girdiğinde \n in silinmesi gerekiyor.(\n yeni satır anlamına gelir, enter ile girdiğin için \n de gidiyor)