2016-04-09 19 views
1

İki kodları karşılaştırmak için bu kodu yazıyorum. Kod çalışıyor, tek sorunum bittikten sonra konsolu açık tutuyor. Normalde, getchar() bir çekicilik gibi çalışır, ancak bu durumda basitçe etkisizdir. Bunun if-else işlevlerinden kaynaklandığını düşünüyorum. Konsolu nasıl açık tutarım?getchar() konsolu açık tutmayacaktır

#include <stdio.h> 
#include <string.h> 
#define SIZE 50 

int main (int argc , char** argv) { 
    char isim[SIZE]; 
    printf("Adinizi yazin:\n"); 
    scanf("%s", isim); 
    if(strcmp(isim, "Cihan") == 0) 
     printf("Hosgeldiniz!\n"); 
    else 
     printf("Cihan degilsiniz. Lutfen programi terk edin.\n"); 
    getchar(); 
    return 0; 
} 

cevap

1

gibi bir şey deneyin. scanf(), yeni satır karakterini giriş arabelleğinden kaldırmaz, bu nedenle ilk satır getchar() bu yeni satırı "yiyor". Bir sonraki girişi beklemek için ikinci getchar() konsolu açık tutacaktır.

cplusplus.com içinde scanf() sayfasından:

işlevi okuyacak ve sonraki boşluk olmayan karakterden önce karşılaşılan herhangi boşluk karakterleri gözardı (boşluk karakterleri boşluk, yeni satır ve sekme karakterleri içerecek - bakınız isspace).

Bana göre.

+1

Teşekkürler! İşe yaradı. –

+0

Bir şey değil! Sağladığım bağlantıdan daha fazla bilgi edinebilirsiniz. –

0

Deyimi kullanabilirsiniz: getch(); conio.h başlıklı başlığı. getch() arabelleği karakter okumaz, doğrudan klavyeden karakter okunur. Bu yüzden henüz giriş yapmamışsanız konsol açılır. getchar() arabellek karakterini okuyun, scanf() sonra giriş arabelleğinizde yeni bir satır okuma ve arabelleğe kaydetme. Sonra getchar(), yeni satır ve deyim durağını okuyacak, konsol kapanacaktır. %s biçim ilk boşluk karakteri bazı olmayan sonra karşılaşıldığında duracağından

+1

Neden? Getchar() 'dan nasıl farklıdır? – hyde

+0

Lütfen sorunun ne olduğunu ve cevabınızın nasıl çözdüğünü OP'nin faydasına açıklayınız. – MikeC

+0

Girdi dizesi'nde 'getch()' arabellekte '\ n' yazmaz. –

0
#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
#define SIZE 50 

int main (int argc , char** argv) { 
char isim[SIZE]; 
printf("Adinizi yazin:\n"); 
scanf("%s", &isim); 
if(strcmp(isim, "Cihan") == 0) 
    printf("Hosgeldiniz!\n"); 
else 
    printf("Cihan degilsiniz. Lutfen programi terk edin.\n"); 
getch(); 
return 0; 
} 
+1

getch() ve getchar() nasıl farklı? Görüyorum ki getch için conio kullanıyorsun. Fark ne? –

0

giriş bir satır sonra programa gönderilir, ancak

scanf("%s", &isim); 

, giriş tamponu içinde yeni satır bırakır Beyaz boşluk. getchar() sonra bu yeni satırı hemen döndürür ve beklemez.

, kod çalışması Hemen birbiri ardına iki getchar(), birini kullanmak bu

scanf("%s", &isim); 
while(getchar() != '\n'){ 
    /* flush to end of input line */ 
} 
+0

Teşekkürler! Gerçekten yeni başlayan biriyim ve bilmediğim bazı çok temel şeyler var. Açıklamanız çok takdir ediliyor. –

+0

Cevabı kabul et :) – Subhiksh