[Çözüldü] scanf-if-scanf almama

Başlatan edge35, 09 Nisan 2017 - 16:17:19

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

edge35

Bir "c" kodu yazdım, fakat istediğim gibi çalışmıyor. Nedenini bir türlü anlayamadım. Yardımcı olabilirseniz sevinirim.
İştediğim çıktı şu şekilde olmalıydı:
$ ./b2
m c m d
operation 'm'
operation 'c'
operation 'c-m'
Done!


Fakat çıktı şu şekilde oluyor:
$ ./b2
m c m d
operation 'm'
operation 'c'
ERROR_1
operation 'm'
Done!


Kodum aşağıdaki şekilde:
#include <stdio.h>
#include <math.h>
int main()
{
char operation;

while(operation != 'd')
{
scanf("%c",&operation);

if (operation == 'm')
{
printf("operation 'm'\n");
}

else if (operation == 'c')
{
printf("operation 'c'\n");

scanf("%c",&operation);

if (operation == 'm')
{
printf("operation 'c-m'\n");
}

else printf("ERROR_1\n");
}
}
printf("Done!\n");
return 0;
}



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 09 Nisan 2017 - 16:40:43

Düzeltme: Sanırsam sebebini anladım, scanf("%c",&operation); işlemini yapınca hiç bir şey yapmadan bir kez dönüyor, ikinci dönüşte if( ; ; )'leri kontrol ediyor. Ama sebebini anlayamadım.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 09 Nisan 2017 - 23:09:50

Yardımcı olabilecek yok mu?


Sorunlarımı çözerken her şeyiyle öğrenmeye çalışıyorum. Bana balık verenden Allah razı olsun, ama bana balık tutmayı öğretenden Allah daha çok razı olsun :)

guestwho

#include<stdio.h>

int main()
{
char operation, last;

while(operation != 'd')
{
scanf(" %c",&operation);

if (last == 'c' && operation == 'm') {
printf("operation 'c-m'\n");
} else if (operation == 'c') {
last = 'c';
printf("operation 'c'\n");
} else if (operation == 'm') {
last = 'm';
printf("operation 'm'\n");
} else if (operation != 'd') {
printf("ERROR_1\n");
}
}

printf("Done!\n");
return 0;
}


Bu şekilde istediğin gibi çalışıyor sanırım. "last" değişkenini ekledim, "if-else" bloklarını düzenledim ve bir de "scanf" fonksiyonu içerisinde " %c" parametresini boşluk ile kullandım.
You want weapons? We're in a library. Books are the best weapon in the world. This room's the greatest arsenal we could have. Arm yourself!

edge35

[mention=622903]@guestwho[/mention] emek verdiğiniz için teşekkür ederim, aslında ben de çalışması için benzr bir şeyler yapıp hallettim fakat ben aslında sorunun sebebini öğrenmek istiyorum.


Sorunlarımı çözerken her şeyiyle öğrenmeye çalışıyorum. Bana balık verenden Allah razı olsun, ama bana balık tutmayı öğretenden Allah daha çok razı olsun :)

guestwho

Sorun "scanf" fonksiyonunun döngü içerisinde ardışıl çağırılmasından kaynaklanıyormuş. Şöyle ki; ilk çağrıda "scanf" fonksiyonu karakter girdisini kabul ettiği gibi enter tuşuna basıldığında yeni satır karakterini ("\n") önbellekte tutuyor. Sonraki çağrılarda bu yeni satır karakteri bir şekilde girdinin başına ekleniyor. Bu yüzden "scanf" fonksiyonu çağırılırken " %c" parametresinden önce tek boşluk bırakılırsa önbellekteki yeni satır karakteri gibi görünmeyen karakterler temizlenmiş oluyor. Bunun gibi sorunlarla sık karşılaşıldığı için genelde "scanf" fonksiyonunun muadillerinin kullanılması önerilir.
You want weapons? We're in a library. Books are the best weapon in the world. This room's the greatest arsenal we could have. Arm yourself!

edge35

Alıntı yapılan: guestwho - 15 Nisan 2017 - 00:14:35
Sorun "scanf" fonksiyonunun döngü içerisinde ardışıl çağırılmasından kaynaklanıyormuş. Şöyle ki; ilk çağrıda "scanf" fonksiyonu karakter girdisini kabul ettiği gibi enter tuşuna basıldığında yeni satır karakterini ("\n") önbellekte tutuyor. Sonraki çağrılarda bu yeni satır karakteri bir şekilde girdinin başına ekleniyor. Bu yüzden "scanf" fonksiyonu çağırılırken " %c" parametresinden önce tek boşluk bırakılırsa önbellekteki yeni satır karakteri gibi görünmeyen karakterler temizlenmiş oluyor. Bunun gibi sorunlarla sık karşılaşıldığı için genelde "scanf" fonksiyonunun muadillerinin kullanılması önerilir.
bilgilendirme için çok teşekkür ederim, bayadır aklımı kurcalıyordu, yeni bir şey daha öğrenmiş oldum.


Sorunlarımı çözerken her şeyiyle öğrenmeye çalışıyorum. Bana balık verenden Allah razı olsun, ama bana balık tutmayı öğretenden Allah daha çok razı olsun :)