2016-04-09 13 views
1

私はこのコードを書いて2つの文字列を比較しています。コードは機能し、私の唯一の問題は、終了後もコンソールを開いたままにしておくことです。通常、getchar()はチャームのように機能しますが、この場合は単に効果がありません。私はそれがif-else関数によるものだと思います。コンソールを開いたままにするにはどうしたらいいですか?getchar()はコンソールを開いたままにしません

#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; 
} 

答えて

1

のようなものを試してみてください、あなたのコードを動作させるために。 scanf()は入力バッファから改行文字を削除しないので、最初にgetchar()はその改行を "食べる"。 2番目のgetchar()は、コンソールを開いたままにする次の入力を待機します。

cplusplus.comでscanf()ページから:

機能が読み込まれ、次の非空白文字の前に遭遇した任意の空白文字を無視します(空白文字は、スペース、改行やタブ文字を含む - を参照isspace)。

私は強調しています。

+1

ありがとう!出来た。 –

+0

あなたは大歓迎です!あなたは私が提供したリンクからそれについてもっと知ることができます。 –

0

あなたはステートメントを使用することができます。getchは();conio.hヘッダー。 getch()バッファ内の文字を読み取らず、キーボードから直接文字を読み取ります。まだ入力していなければ、コンソールが開きます。 getchar()のscanf()の後に入力バッファの改行をバッファから読み込み、バッファに保存しないでください。次にgetchar()改行となり、文の停止、コンソールが閉じます。 %sフォーマットは最初の空白文字は、いくつかの非後に遭遇したときに停止しますので、

+1

なぜですか? 'getchar()'とどう違うのですか? – hyde

+0

OPの利益のために、問題の内容と答えがどのように解決されるかを記述してください。 – MikeC

+0

'getch()'は、入力文字列がバッファの中で '\ n'を読み込まないためです。 –

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()とgetchar()はどのように異なっていますか?私はgetchのためにconioを使用することを参照してください。違いはなんですか? –

0

入力は改行後のプログラムに送信されますが、

scanf("%s", &isim); 

は、入力バッファ内の改行を残し空白。 getchar()は、その改行を直ちに返し、待機しません。

ちょうど2 getchar()、次々に使用し、この

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

ありがとう!私は本当に初心者で、私が知らない非常に基本的なものがいくつかあります。あなたの説明は非常に高く評価されています。 –

+0

答えを受け入れる:) – Subhiksh

関連する問題