2011-05-28 10 views
1

コンソールからいくつかの数字を読みたい。数字は、このように表示されます -コンソールから番号を入力する方法

5 1 2 3 4 5 
4 5 6 7 8 
6 2 3 4 5 6 7 
.............. 
EOF 

始まる番号が最初の行の最初の数が5である、すなわち、その行に表示されますので、このライン上の5つの以上の数字があるでしょうどのように多くの数を表し。入力の終了は、EOF(ファイルの終わり)で示されます。

私は行全体を文字列として読んで数値に変換することを考えましたが、これを行う方法は他にあります。

答えて

2

scanfのドキュメントを見てください:

int count, current, i; 
while(scanf("%d", &count) > 0) 
{ 
    for(i = 0; i < count; i++) 
    { 
     scanf("%d", &current); 
     // store current 
    } 
} 
+0

for-loop内でscanfの戻り値をテストしています。 –

+0

また、そうしなければならないときに、行末に達したかどうかを知る方法もありません。 'scanf()'は早期に発生する改行を受け取り、遅れて発生する改行を無視します。データ '1 1 3/1 2'(スラッシュは改行)の場合、最初の行は 'OK'(1ではなく2つの値を含んでいても)であり、3はカウントとして解釈されます2番目の行には2つの値しかありません。このため、 'scanf()'がまったく正しい関数であるとは限りません。 (私は以前の25年間のプログラミングで持っていたよりも、 'scanf()'を使っていました!) –

+0

@Neil Butterworth:質問には言及されていないので追加しませんでしたが、OPはできます必要であれば、彼は 'scanf'文書を読んでください。 –

3

'標準' 答えはscanf()です。標準的な答えの問題は、行に正しい数の数字があることを確認できないことです。ですから、行を読み込んだ後、それを少しずつ変換するという考え方は、エラー検出の方がはるかに優れています。

How to use sscanf() in loopsをご覧ください。その答えはあなたに何をすべきかの基本を示しています。それは正確な複製ではありません。行の中にいくつのエントリがあるかを特定する最初の値を読み取り、配列にその多くのエントリを読み込むコードと、データが要求されたフォーマットと一致しない場合に適切な診断を行います。

データ形式を担当している場合は、カウントフィールドを削除することを検討してください。コンピュータは、その行にいくつの値があるかをカウントさせてください。コンピュータは数え方が優れており、検出して処理するエラーの原因を取り除くので、プログラミングが簡単になります。 (入力形式を変更した場合、質問はリンクされた質問と重複してしまいます)

関連する問題