2016-12-20 10 views
2

私はfgetsを使って端末から数行のテキストを読み込もうとしています。問題は、1行だけを読み込み停止することです。バッファをフラッシュしてgetcharを使用して改行を吸収しようとしましたが、それでも動作しませんでした。端末から読むためにループ内のfgetsを使う

#include <stdio.h> 

int main() 
{ 
     int count = 2; 
     int len = 5; 
     char str[count][len]; 

     for(int i = 0; i < count; i++) 
     { 
       fgets(str[i], len, stdin); 
       fflush(stdin); 
     } 
} 
+1

どのようにチェックしましたか? 'len'の値を増やしてみてください。 – BLUEPIXY

+1

'fflush(stdin);'は定義されていません – artm

+2

あなたはそれをどのように入力していますか? – doctorlove

答えて

3

fflush(stdin);undefined behaviourである。それを使用しないでください。

あなたの問題は、より多くの文字をlenに入力していることです。したがって、fgets()への2回目の呼び出しでは、最初の呼び出しで残った文字が読み込まれます。 ちょうどlenを増やすだけです。

戻り値がfgets()であることも確認してください。

+0

これは、文字列の最後にヌル文字と改行を考慮していないことです。それらを保存しない方法は何ですか?私は後でこれらの文字がなければ配列で作業できますか? –

+0

C文字列として使用する場合は、nullバイトが必要です。改行については、 'strcspn [str [i]、" \ n "] = 0;'を使って取り除くことができます。 –

+0

あなたの 'strcspn() '提案には磨きが必要です。 'str [i] [strcspn(str [i]、" \ n ")] = '\ 0';はあなたが意図したものです。 –

関連する問題