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?
#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.
[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.
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.
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.