[Çözüldü]Klavyeden sayı alınca oluyor, harf alınca olmuyor...

Başlatan noktakom, 15 Ocak 2011 - 13:26:14

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

noktakom

Ekrandan karakter aldıkça sayıları arttırarak yazan bir programcık yazdım yalnız harf alarak yapmak isteğimde çalışmıyor. bazen kısır döngüye giriyor, bazen döngüyü 2 şer 2 şer yapıyor vs.. ilginç sonuçlar ortaya çıkıyor. anlayamadım .muhtemelen biryere odaklandığım için yaptığım hatayı göremiyorum. Bu yüzden size danışıyorum. 4. yöntem dışındakiler aynı mantık olmasına rağmen neden sorun çıkartıyor???

int main() {
int x=1;
char y;
/*1. Yöntem
do { printf("%d\nçıkmak için q'ya basın",x);
y=getchar();
x++;
}while ('q'!=y);
return 0;*/

/*2. Yöntem
  for(y='d';'q'!=y;y=getchar(),x++)
printf("%d\nçıkmak için q'ya basın",x);
return 0;*/

/*3. Yöntem
aa:printf("%d\n[d]evam..",x);
scanf("%s",y);
x++;
if ('d'==y);goto aa;
return 0;*/

//4. Yöntem
int z;
aa:printf("%d\ndevam için 1 ",x);
scanf("%d",&z);
x++;
if (1==z);goto aa;
return 0;
}

sem

Karakterleri de scanf fonskiyonu çerisinden %d ile mi okuyorsunuz? %d ile int gibi tam sayıları okursunuz... Karakter okumak için %c deneyin... printf parametreleri ile araştırma yaparsanız ya da scanf hangi  türü hangi parametre ile okumanız gerektiğini bulacaksınız büyük ihtimalle...

Yalnız karakter alırken bir sayı girerseniz işler karışacaktır... Bu gibi durumlar için hata kontrolü yapmalısınız... Tabii programda çok önemi yok ise gerek olmayacaktır.. Fakat gerek olursa eğer karakter test makrolarını kullanmasınızı... Bunlara da internetten ulaşabilirsiniz...

örneğin "isalpha()"... Parametresinin alfabetik olması ya da olmaması durumuna göre bir geri dönüş yapar... Bu gibi durumlardan bahsediyorum... Kolay gelsin...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sem

".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

noktakom


sem

Çözülen sorunlarda, sorunun çözümü ile geri dönüş yaparsak daha toplu halde saklamış oluruz eski başlıkları. İlk iletiyi düzenleyerek de konu başlığına [Çözüldü] ibaresini eklerseniz yönetici arkadaşlar konuyu daha görüp, kilitleyebilirler. Kolay gelsin...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

sayz

ben de tam bu konuda bir başlık açacaktım teşekkürler @hkndvc.
bende de aynı sorun var fakat ben scanf'te %c ile alıyorum  harfi en baştan beri, örneğin while döngüsünün içerisindeyim, program ilkinde scanf'te durmuyor direk geçiyor ve 2. uğrayışında duruyor ve harfi alıyor. ama %d ile sayı alırsam bunu yapmıyor normal çalışıyor anlamadım bir türlü. foruma bir dahaki girişimde sorun yaşadığım kodu da paylaşacağım, şimdi yatsam iyi olacak ;D

noktakom

Buraya ayrıntılı bilgi geçemememin sebebi hatamı görüp, uygulamaya üşenmem, vakit bulamamamdı.  Talep üzerine kodları hazırladım ve paylaşıyorum...

@sayz, bakman gereken yer while satırı... ayrıca 5,7,11 ve 13. iletilerde @sem0900 sağolsun çok geniş bir şekilde açıkladı http://forum.ubuntu-tr.net/index.php/topic,24690.25.html


//Altın sayma programı :) Kemal Sunal'ın filmini hatırlayın...:)
#include <stdio.h>
char z;
int x=1;
int main()
{
aa:printf("%d\ndevam için [e] ",x);
scanf("%c",&z);
while (getchar() != '\n');//stdin tamponu bosaltiliyor...
x++;
if ('e'==z)
goto aa;
return 0;
}