Tam Sürümünü Görmek İçin : scanf problemi
merhaba
aslında çok basit bişey ama galiiba göremediğim bişey var.
kullanıcıdan biri int ikisi char olmak üzere 3 tane değişken almak istiyorum ama
bi türlü olmuyor.ilk ikisini alıyo üçüncüyü yokmuş gibi davranıyor. neden olabilir? iyi çalışmalar.
şöyle denedim:
printf("sayiyi girin\n");
scanf("%d",&sayi);
printf("1karakteri girin\n");
scanf("%c",&ch1);
printf("2.karakteri girin\n");
scanf("%c",&ch2)
olmadı şöyle denedim:
scanf("%d%c%c",&sayi,&ch1,&ch2);
bu da olmadı.
karakterleri getcharla almayı denedim o da olmadı. :2:
niye olmuyor bu anlamadım ,
tesekkürler.
Sanırım buradaki sorun scanfin karakterleri sayıları gibi almamasından kaynaklanıyor...
Mesela sen program "sayiyi girin" dedikten sonra 5 yazıp entera bastın. Bu durumda sayi değişkenin değeri 5 olıyor ve ch1 in değeri ise enter yani "\n" oluyor. Bu şekilde ancak 2. değişkeni istediğin şekilde alabilirsin.
Böyle sorunlarla karşılaşmamak için mümkün olduğunca printf-scanf yerine cout-cin ikilisini kullanmanı tavsiye ederim. (iostream.h)
cout << "sayiyi girin\n";
cin >> sayi;
cout << "1karakteri girin\n";
cin >> ch1;
cout<< "2.karakteri girin\n";
cin >> ch2;
şeklinde yapmayı denersen olması gerek.
printf("Bir sayi, iki karakter girin.");
scanf("%d %c %C", &sayi, &ch1, &ch2);
Bu sekilde degistir calisir.
lord_caine
02/05/2005, 23:48
ya da getch() kullan
ilk ikisini alıyo üçüncüyü yokmuş gibi davranıyor.
aslında hepsini alıyo.. sen bi sayı giriyosun ve ardından enter a basıyosun '\n' degeri de akışta kalıyo sende scanf() le ch1 e değer almak isterken akışta bulunan '\n' degeri ch1 e atanıyo..ve senden ch2 için bi değer istiyo bunu canlı gormek istiyosan hepsinin degerlerini bi watch ta ( ya da ekrana yazdırarak) kontrol et...
Bunu engellemek için her scanf() ten sonra getchar(); ile akışta kalan son '\n' i al..
Örneğin :
{
scanf("%d", &sayi);
getchar();
scanf("%c", %ch1);
getchar();
scanf("%c", &ch2);
getchar();
}
gibi...
Aslında bu cin nesnesi ile de karsılasılabilecek bi durum... olayın c++ taki karsılıgı ise
cin.ignore(10, '\n');
acehreli
03/05/2005, 01:24
sckz, Sabahi'nin yontemini farketmedin mi? Kisa oldugu icin bence onu kullanmak daha iyi olur. (Tabii oradaki %C de aslinda %c olacak.)
Ali
a evet o daha mantıklı... aslında std::cin.ignore() en güzeli ama...
alakasız ama bu forumun saati yanlış... saat 15:24 değil.. 01:29.
acehreli
03/05/2005, 01:35
Ben forum saatinin herkesin kendi ayarina gore oldugunu dusunuyordum. Saati 15:24 goruyorsan bilgisayarinin Pacific zamanina ayarli oldugunu dusunuyorum.
Ali
hocam benim bilgisayarın saati doru.. bi sorun yok..
(Tabii oradaki %C de aslinda %c olacak.)
Ali
Aslinda scanf ile single byte character icin %c ve %C nin esdegerli ifadeler oldugunu vurgulamak icin ozelikle hem kucuk hemde buyuk harf kullanmistim. Yinede %hc ve %hC seklinde yazsam belki daha aciklayici olurdu.
acehreli
05/05/2005, 23:48
%C kullandigin derleyicinin bir ek olanagi olmali; cunku scanf'in belgelerinde gecmiyor ve gcc de kodu derlemiyor.
Ayni belgeye gore, h karakteri de yalnizca diouxn karakterlerinden birisinden once kullanilabiliyormus, c'den once degil...
Ali
%C gcc de derlemez cunki bir Microsoft extension yalniz %hC nin ANSI standart oldugu aklimda kalmis ama yaniliyor olmaliyim belki h karakteride tamamen Microsoft a ozgu bir sey.
Bu arada dikkatimi cekti Bay Area dan oldugunuzu yaziyor, bende San Diego dayim.
acehreli
06/05/2005, 20:58
%C ve h konularinda anlastik... Bu taraflara yolun duserse haber ver :)
Ali
Elbette. Szinde bu taraflara yolunuz duserse bir selam etmeden gecmeyin tabi.
ewet tahmin ettiğim gibi, işte tam bu sorunun çözümü
http://www.hardwaremania.com/forum/showthread.php?t=32190
acehreli
09/05/2005, 22:45
O "cozum"u kullananlara kolay gelsin! Cunku fflush giris akimlariyla kullanilamaz. Orada verilen program bu yuzden yanlistir.
Ali
ali kardeş lütfen... sayfada aşağı doğru inersen http://www.hardwaremania.com/forum/showthread.php?p=327376#post327376 bende birtakım çözümler sunmuştum... (burdakine benzer çözümler..) (gonulk)
bu arada zaat zorununu çösdüm... zorun benden kaynaklanıyomuş...
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.