[]
C dili char okutma hk. bir soru
Microsoft visual studio 2010da kendi imkanlarımla c çalışıyorum. Ama ilginç bir şey var kafamı kurcalayan.
Mesela kullanıcıdan bir sayı ve bir karakter girmesini isticez bunları da scanf ile okutucaz diyelim. önce karakteri sonra sayıyı girmesini istersek sorun olmuyo ama karakteri sayıdan sonra girmesini istersek program karakteri okumuyo. o aşamayı atlıyo neden böyle oluyo acaba bi açıklaması var mıdır ki?
Örnek1(***BUNDA SORUN YOK***):
int sayi;
char karakter;
printf("Bir karakter girin: ");
scanf("%c",&karakter);
printf("\nBir tek sayi girin: ");
scanf("%d",&sayi);
...
...
Örnek2(***BU OLMUYOR***)
int sayi;
char karakter;
printf("Bir tek sayi girin: ");
scanf("%d",&sayi);
printf("\nBir karakter girin: ");
scanf("%c",&karakter);
...
...
Mesela kullanıcıdan bir sayı ve bir karakter girmesini isticez bunları da scanf ile okutucaz diyelim. önce karakteri sonra sayıyı girmesini istersek sorun olmuyo ama karakteri sayıdan sonra girmesini istersek program karakteri okumuyo. o aşamayı atlıyo neden böyle oluyo acaba bi açıklaması var mıdır ki?
Örnek1(***BUNDA SORUN YOK***):
int sayi;
char karakter;
printf("Bir karakter girin: ");
scanf("%c",&karakter);
printf("\nBir tek sayi girin: ");
scanf("%d",&sayi);
...
...
Örnek2(***BU OLMUYOR***)
int sayi;
char karakter;
printf("Bir tek sayi girin: ");
scanf("%d",&sayi);
printf("\nBir karakter girin: ");
scanf("%c",&karakter);
...
...
çok bilgili biri değilim ama hatırladığım kadarıyla scanfle karakter almaya çalışınca sıkıntılar olabiliyordu. karakterleri scanfle değil getchle almayı dene. ama kütüphane eklemen lazım. hatırlayamıyorum kütüphanesini.
- jjwa (02.01.13 00:58:25 ~ 00:58:38)
normaldir. sayıyı okurken, sayıyı yazıp entera basılınca \n konulur oraya gizlice. ardından da char okumaya kalkınca, enterla gelen \n okunuyor otomatik olarak.
çözüm; okumak için başka bir fonksiyon kullanılabilir ya da sayı okuduktan sonra bir adet scanf konulabilir \n'i alması için. yani:
int sayi;
char karakter;
char buff;
printf("sayi gir: ");
scanf("%d",&sayi);
scanf("%c",&buff);//enterla gelen \n'i okuyuver
printf("Bir karakter girin: ");
scanf("%c",&karakter);
çözüm; okumak için başka bir fonksiyon kullanılabilir ya da sayı okuduktan sonra bir adet scanf konulabilir \n'i alması için. yani:
int sayi;
char karakter;
char buff;
printf("sayi gir: ");
scanf("%d",&sayi);
scanf("%c",&buff);//enterla gelen \n'i okuyuver
printf("Bir karakter girin: ");
scanf("%c",&karakter);
- milistroke (02.01.13 01:11:58 ~ 01:13:52)
çünkü sayıyı girdikten sonra bastığın enter'ı da karakter olarak algılıyor.
bundan kurtulmak için karekteri iki kere okuyabilirsin,
printf("\nBir karakter girin: ");
scanf("%c",&karakter);
scanf("%c",&karakter);
veya araya bir getchar atabilirsin,
printf("Bir tek sayi girin: ");
scanf("%d",&sayi);
getchar();
printf("\nBir karakter girin: ");
scanf("%c",&karakter);
veya string olarak tanımlayıp karakter dizisi olarak alabilirsin.
bundan kurtulmak için karekteri iki kere okuyabilirsin,
printf("\nBir karakter girin: ");
scanf("%c",&karakter);
scanf("%c",&karakter);
veya araya bir getchar atabilirsin,
printf("Bir tek sayi girin: ");
scanf("%d",&sayi);
getchar();
printf("\nBir karakter girin: ");
scanf("%c",&karakter);
veya string olarak tanımlayıp karakter dizisi olarak alabilirsin.
- ocanal (02.01.13 01:15:08 ~ 01:22:19)
1