2017-11-01 49 views
0

私の理解では、fgets()はキャリッジリターン(\n)まで入力をスキャンしますが、このコードは別の方法を示します。私は余分なラインがどこから来るのか分からない。誰か説明できますか?Cでこのfgets()の動作を説明してください

#include <stdio.h> 
#include <string.h> 

#define BUF_SZ 256 

void reverse(char str[]) { 
    /* fill in the function body please */ 
    for (int i = 0, j = strlen(str) - 1; i < strlen(str)/2; i++, j--) 
    { 
     char temp; // perform the swap 
     temp = str[i]; 
     str[i] = str[j]; 
     str[j] = temp; 
    } 
} 

int main() { 
    char mesg[BUF_SZ]; 
    printf("Enter a message please=> "); 
    fgets(mesg,BUF_SZ,stdin); 
    reverse(mesg); 
    printf("%s\n",mesg); 
    return 0; 
} 

これが出力されます。 enter image description here

+0

[fgetsから改行を削除する]いくつかの方法があります(https://stackoverflow.com/questions/2693776) – user3386109

答えて

4

あなたは改行に続いて「こんにちは」の入力を得ました。あなたは "Hello"の後に改行を得るためにそれを逆にしました。それから、あなたはそれを印刷して改行をつけました。

fgets(mesg,BUF_SZ,stdin); 

さて、「Hello」の後に改行があります。

reverse(mesg); 

さて、ここでは、「olleH」という改行があります。

printf("%s\n",mesg); 

出力し、その後に改行を追加しました。

謎は何ですか? fgetsドキュメントから

+0

OMG今私はとても愚かな気がします。ハハ。どうもありがとう。あなたのキャリッジリターンはfgets()でスキャンされます –

2

は、それが入力中にキャリッジリターン\n保つ:

読み込みほとんどのカウントで - 指定したファイルストリームから1つの文字を、配列は、strで指された文字に格納します。ファイルの終わりがあるか改行文字が見つかると、読み込みは停止します。この場合、文字列に改行文字が含まれます。エラーがなければ、strに最後に書き込まれた文字の直後の位置にヌル文字を書き込みます。

ので、

"Hello\n" 

は次のようになります。あなたが取得しているものだ

"\nelloH" 

関連する問題