On Thu, Apr 12, 2012 at 11:55 PM, necati vardar <[email protected]> wrote:
> scanf("%c", &yazi2);             // Her ne hikmetse burada beklemiyor!!!!
>
> yerine
>
> scanf("%d", &yazi2);             // Her ne hikmetse burada beklemiyor!!!!
>
> değiştirsen sorunsuz çalışıyor ;)

Böyle yaparsanız çalışabilir, ama bu yapılması gereken şey değil.
çünkü %d 10 tabanında sayı okumak için. Bunu bir char'a yazmak için
kullanırsanız ve kullanıcı 45343 yazarsa taşma olur.

Neyse, problem şurada: pek sevgili c geliştiricilerinin yazılımcıları
şarşırtmak için yaptığı sevimliliklerden biri bu. Siz scanf("%d",
&sayi2); dediğinizde oradan bir sayı bekliyorsunuz. ama ekranda sirf
bir sayı vermiyorsunuz. aynı anda bir de \n karakteri veriyorsunuz.
tam da o sırada bir karakter okumaya çalışan scanf("%c", &yazi2);
çalışıyor ve o char olarak yeni satır karakterini alıyor.

(Böyle şeyler sayesinde hiç sıkılmazsınız C yazarken, her arn bir
heyecan, yine umulmadık ne çıkacak diye :) )

Çözmek için bir geçici char tanımlayıp, son okuduğunuz tam sayıdan
sonra onun içine bir char okuyabilirisiniz. ardından da gerçekte
okumak istediğiniz şeyi okursanız probleminiz hoş görünmeyen bir
şekilde de olsa çözülmüş olacaktır.

Hüsrev.
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap