[]

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);
...
...

 
ç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);
  • 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.
  • ocanal  (02.01.13 01:15:08 ~ 01:22:19) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.