2016-12-02 5 views
0

私はCプログラミングの初心者で、今はscanfを学んでいます。scanf()で私のコードを説明するには?

私はいくつかのコードを書いており、私はそれを理解しようとしています。ここで

はコードです:

#include <studio.h> 
int main(){ 
    int a=1, b=2, c=3; 
    scanf ("%d%d", &a,&b); 
    scanf ("%d", &c); 
    scanf ("%d", &c); 
    printf ("a=%d\nb=%d\nc=%d\n", a, b, c); 
    return 0; 
} 

When I input 
11 22 33 44 
The output is 
a=11 
b=22 
c=44 

これは正常です。しかし、私が入力したとき:

11, 22, 33, 44 
Output 
a=11 
b=2 
c=3 

入力プロセスが停止しているようです。

なぜこのようなことが起こっているのですか?

(それは%d, %d"」のようなものです)%d%d間のカンマを入れ、入力データを提供する際に、実際に、入力はカンマで分離しなければならない。

scanfパラメータに私にカンマためのいくつかの提案を与えることができますか?

+1

'scanf'はあなたが指定した入力を解釈しようとします。これは明らかに最初の '%d 'に対してうまくいきます。それは'、 'を読み込み、それを整数に変換しようとしますが、これはうまくいきません。だから失敗し、値は前と同じ値になります( 'b = 2')。 次の 'scanf'は同じことを試み、再び失敗し、' c = 3'となります。 値を '、'で区切ってはいけません。うまくいくでしょう。 – SgtDroelf

+1

'scanf()'がどのように動作するかを推測しようとするのではなく、使用しているテキストにドキュメントやその説明を読み込むのはどうですか?あなたのインストラクターに相談することもできますか?私たちはあなたがここで助けを求める前に、あなた自身のための解決策を見つけるために合理的な努力をすることを期待します。 –

+0

ご返信ありがとうございます。私は自分でCを学ぶ時、インストラクターは私を助けません。 – user7241487

答えて

1

stdinでフォーマット文字列と一致しない文字が見つかった場合、scanfの読み取りを停止します。

この例では、scanfは整数値を構成する文字のみを使用します。実際には、最初のscanfは最初のカンマに達した時点で停止します。他のscanfsが標準入力を読み込もうとすると、最初に見つかる最初の文字は、scanfより前に読み込まれたが使用されなかった最後の文字、カンマです。これは、何も読まなくてもすぐに終了する理由です。

あなたが入力したい値の上にカンマやその他の文字を使用する場合は、その文字列を明示的に書式文字列に挿入する必要があります。

scanf("%d, %d", &a, &b); 

あなたは整数を読み込み、変数に保存し、コンマを読んで、それを忘れて、次に別の整数を読んで、それを保存するためのscanfに指示されています。このなステートメントを持つ例えば

変数b。解析中にscanfが整数またはカンマではないものを見つけたら、他の値を読み取らずにすぐに停止します(これがbとcがプログラムの初期値を持つ理由です)。

0

あなたはこのようscanfでカンマを使用することができます。 scanf ("%d,%d,%d", &a,&b,&c); カンマで区切って一行で、あなたの入力番号 11,12,13 (注)このシナリオでは。カンマで区切られた数字の単一行入力が必要です。この場合の入力が11 12 13になると、希望の出力が得られます。

0

あなたのお返事ありがとうございます。

#include <stdio.h> 
int main(){ 
    int a=1, b=2, c=3; 
    scanf ("%d, %d", &a,&b); 
    scanf ("%d", &c); 
    scanf ("%d", &c); 
    printf ("a=%d\nb=%d\nc=%d\n", a, b, c); 
    return 0; 
} 

とき、私入力

11 22 33 44 

出力::私は別のコードを試してみました

a=11 
b=2 
c=33 

方法を説明するには?2番目の質問へ

+0

この回答は投稿の問題には答えませんが、別の質問です。削除を推奨します。 – chux

0

まずscanfは、カンマで区切られた整数を期待(:(ここで引用する方法を知りません)。あなたはそれscanfaにそれを最初の数11を取り、割り当てられていることのようなあなたの入力を入力しなかったので(bは無視される)。第二にscanfを入力して数22と第三scanf33。数44を取ったが冗長である。ザッツはなぜあなたの出力はそのように見えます。b=2は、コードの前の部分からである 注ことint b=2

関連する問題