-
-
Save roktas/1257912 to your computer and use it in GitHub Desktop.
hesap makinesi hatası
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int | |
main(void) | |
{ | |
int say1, say2, tip; | |
printf("1. sayıyı giriniz: "); scanf("%d", &say1); | |
printf("2. sayıyı giriniz: "); scanf("%d", &say2); | |
/* | |
* stdio.h'da tanımlı işlevler (scanf dahil) daima tamponlanmıştır. | |
* Örneğin, kullanıcının klavye girdisi önce bir ara belleğe (tampon) | |
* okunur ve kullanıcı ENTER'a bastığında ('\n') tamponlanmış olan | |
* girdiler işlenir (ENTER "tamponu işle" gibi bir anlama geliyor). | |
* Yani scanf '%d' ayrıştırmasını ENTER'a basıldığında yapar ve | |
* tamsayıyı okuduktan sonra '\n' karakterinde işlemi sonlandırır. | |
* Sonuç? ENTER ile gerçekleşen her scanf çağırısında tamponda bir adet | |
* artık '\n' bulunur. | |
* | |
* Demek oluyor ki bu noktada tamponda bir '\n' var. Şimdi getchar | |
* çağrılırsa tamponda '\n' görülür ve işlev sadece bu karakteri okuyup | |
* döner. | |
* | |
* O halde çözüm olarak getchar çağrısından önce tamponu '\n'e kadar | |
* boşaltmamız lazım. Nasıl? Yine getchar'ı kullanarak, şöyle: | |
*/ | |
while (getchar() != '\n') | |
/* | |
* '\n'e kadar ('\n' dahil) boş okuma yap. getchar her | |
* seferinde tampondan bir karakter çeker. Bu örnek için | |
* aslında tek bir getchar çağrısı da yeterli çünkü tamponda | |
* sadece bir adet karakter var, o da '\n'. | |
*/ | |
; | |
printf("İşlem tipini giriniz (+,-,*,?): "); tip = getchar(); | |
switch (tip) { | |
case '+': printf("%d\n", say1 + say2); break; | |
case '-': printf("%d\n", say1 - say2); break; | |
case '*': printf("%d\n", say1 * say2); break; | |
case '/': printf("%d\n", say1 / say2); break; | |
default: | |
fprintf(stderr, "Hatalı işlem tipi: %c\n", tip); | |
return 1; /* Hata durumunu sinyalleyerek çık. */ | |
} | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
int | |
main(void) | |
{ | |
int say1, say2; | |
char tip; | |
/* | |
* "Tamponda artık '\n'" hatalarını önlemek için tamsayı okurken | |
* tamsayıdan sonra gelen ekstra karakterleri yutuyoruz. Nasıl? | |
* "%d%*c" biçim dizgisiyle: %d oku ve kalan tüm karakterleri ('%*c') | |
* bir değişkene atamadan göz ardı et. | |
*/ | |
printf("1. sayıyı giriniz: "); scanf("%d%*c", &say1); | |
printf("2. sayıyı giriniz: "); scanf("%d%*c", &say2); | |
printf("İşlem tipini giriniz (+,-,*,?): "); scanf("%c", &tip); | |
switch (tip) { | |
case '+': printf("%d\n", say1 + say2); break; | |
case '-': printf("%d\n", say1 - say2); break; | |
case '*': printf("%d\n", say1 * say2); break; | |
case '/': printf("%d\n", say1 / say2); break; | |
default: | |
fprintf(stderr, "Hatalı işlem tipi: %c\n", tip); | |
return 1; /* Hata durumunu sinyalleyerek çık. */ | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Aynen John Wayne'n :-)