C´de scanf() ile değer alma önceliği

C´de scanf() ile değer alma önceliği

FatihÖzen

Basit bir örnek üzerinden sorumu sorayım :)

Scanf() ile 2 sayı ve bir operatör (+,-,*,/,%) alıp işlem yapıyoruz.
[hr]
int main(void){

int bir,iki;
char operator;

printf("Operatör gir: "); scanf("%c",&operator);
printf("İşlem için ilk sayıyı gir > "); scanf("%d",&bir);
printf("İşlem için ikinci sayıyı gir > "); scanf("%d",&iki);

switch(operator){

//girilen sayılar ve operatöre göre işlem burda yapılıyor.

default:
printf("Yanlış Operatör Girdiniz.");
}
return 0;
}
[hr]

Üstteki kodda sorun yok. Şimdi Girdi sırasında bir değişiklik yapalım ve Operatörü 2 sayıyı aldıktan sonra girilmesini isteyelim.

int main(void){

int bir,iki;
char operator;

printf("İşlem için ilk sayıyı gir > "); scanf("%d",&bir);
printf("İşlem için ikinci sayıyı gir > "); scanf("%d",&iki);
printf("Operatör gir: "); scanf("%c",&operator);

switch(operator){

//girilen sayılar ve operatöre göre işlem burda yapılıyor.

default:
printf("Yanlış Operatör Girdiniz.");
}
return 0;
}
[hr]

Evet işte sorun burda çıkıyor. 2 sayıyı alıyoruz sıra operatöre gelince "Yanlış Operatör Girdiniz." mesajı ile program sonlanıyor.

Merak ettiğim Girdi önceliğinin neye göre olduğu:)

2008-06-25 02:26:48

Cvp

FatihÖzen

Buffer ile alakalı bir durum sanırım.

Yazılım konusunda uzman olan insanlarda gördüğüm ortak bir nokta vardı. Uzamış ve dağınık saç, sakal. Temiz ama uyumsuz kıyafetler..[G1]

Şimdi daha iyi anlıyorum[G3]

C´yi araştırdıkça derinlere gidiyor[G1].

2008-06-25 17:42:55

Cvp

FatihÖzen

Sorunu getchar() kullanarak hallettim. Buffer ile ilgiliymiş. Bu durum bana biraz garip geldi:)

[hr]

#include <stdio.h>

int main(void){

int bir,iki;
char operator;

printf("İşlem için ilk sayıyı gir > "); scanf("%d",&bir);
printf("İşlem için ikinci sayıyı gir > "); scanf("%d",&iki);
getchar();

printf("Operatör gir: "); scanf("%c",&operator);

switch(operator){
case ´+´: printf("%d %c %d = %d
",bir,operator, iki, bir + iki); break;
case ´-´: printf("%d %c %d = %d
",bir,operator, iki, bir - iki); break;
case ´%´: printf("%d %c %d = %d
",bir,operator, iki, bir % iki); break;
case ´*´: printf("%d %c %d = %d
",bir,operator, iki, bir * iki); break;
default:
printf("HATA: Tanımsız bir operatör girdiniz!
");
}
return 0;
}

2008-08-19 23:29:22

Cvp

FatihÖzen

Buffer ile ilgili kafama takılan şu.

Programın başında değişkenlerin türünü belirleyip hafızada ona göre yer ayırıyoruz. Peki hepsinin yeri yurdu belliyken neden böyle bir sorun çıkıyor anlayamadım.

2008-08-19 23:34:44

Cvp

SPESYALIST

fflush yapıp tekrar denedinmi? Çünkü eğer buffer ile alakalı ise ozaman bufferi temizlemen gerek. Dolayısı ile fflush yada bununla alakalı fonksiyonlar bufferi temizler.

2008-12-08 19:53:09

Cvp

chrome_nickel

okunan operator´ü ekrana yazdırmayı denediğinde ne oluyor peki?

2008-12-09 23:03:53

Cvp

FatihÖzen

Kusura bakmayın sorunu altta ki adreste tartışıp çözüme kavuşturduktan sonra buraya yazmayı unuttum.

[url]http://www.cagataycebi.com/forum/index.php?topic=313.0[/url]

Şimdi adreste açtığım başlığı tekrar okudumda çok garip yorumlar yapmışım :))

İlhan, fflush fonksiyonunu denemedim açıkcası. Ancak diğer çözüm yolları arasında en temizi bu olur sanırım. Sizler ne dersiniz.?

[url]http://www.sorucevap.com/bilisimteknolojisi/programcilik/c/ders.asp?206634[/url]

Kadir, iki sayıyı alıp operator´e sıra gelince program "Yanlış Operatör Girdiniz." mesajıyla sonlanıyordu.

Derleme için gcc kullanıyorum.

2008-12-10 02:14:40