2017-05-11 4 views
0

私はCを使っていて、以下のコードを書いています。スペースで文字列を入力すると、プログラムはすべての入力を受け取りますが、異なる時間に1つの単語として入力されたかのように出力します。私はscanfが最初の空白文字に遭遇し、残りを無視したときに停止したと思った。しかし、それはそうではないようです。ループ内の空白文字列にscanfを使用すると面白い動作があります

「inputWithNoSpaces」と「スペースで入力」を入力すると出力が表示されました。

私はstdinを調べようとしました。すべての入力を受け取ります。しかし、私はscanfが何をしているのか理解できませんでした。何が起きているのかを知りたい。

コード:

#include <stdio.h> 

int main() 
{ 
    int i=0; 
    char word[64]=""; 

    while(1) 
    { 
     printf("enter string:"); 
     scanf("%s",word); 
     i++; 
     printf("%d:%s\n\n",i,word); 
    } 

    return 0; 
} 

出力:

enter string:inputWithNoSpaces 
1:inputWithNoSpaces 

enter string:input with spaces 
2:input 

enter string:3:with 

enter string:4:spaces 

enter string: 
+1

文字列に 'scanf'を使用しないでください。' fgets'を使用してください。 –

+0

stdioは入力行全体をバッファリングすることに注意してください。 Scanfはキーボードからの読み取りは行いません。そのバッファから読み込みます。 –

答えて

2

scanf()では、"%s"は "その後、非空白文字のシーケンスを読んで空白文字をスキップ" を意味します。ですから、入力をinput with spacesにすると、3回の呼び出しで"input","with""spaces"が返されます。それが期待される行動です。詳細はmanual pageを参照してください。

関連する問題