0

C のすべてについて疑問に思っているのですが、これをわかりやすく説明していただけますか

ターボCを使用しています。

私はこのコードを持っています

scanf(“%d , %d”,&a,&b);
printf(“%d,%d”,a,b);
scanf(”%c”,&c);
printf(“%d,%d”,a,b);

次に、c の値をスキャンしないための scanf

出力は: 1,2

これを使えば

scanf(“%d , %d”,&a,&b);
printf(“%d,%d”,a,b);
scanf(”%c ”,&c);//note a blank after %c
printf(“%d,%d”,a,b);

次に、cの値をスキャンします。

出力は 1,2 1,2

同じコード

scanf(“%d , %d”,&a,&b);
printf(“%d,%d”,a,b);
scanf(”%1s”,&c);
printf(“%d,%d”,a,b);

このセグメントでは a の値が表示されますが、b の値は 0 に設定されます

出力は 1,2 1,0

両方の質問の答えを説明できますか。

まだ答えが得られませんでした.......

4

2 に答える 2

3

最後のケースでは、メモリ内の値が設定されている場所に関係しています。

2 番目scanfは、長さ 1 の文字列をアドレスに配置しますc。つまり、1 文字の後に null ターミネータが続きます。

null ターミネータがどこにあると思いますか?

于 2010-02-10T04:05:08.537 に答える
1

c最初のケースで文字がスキャンされていないことをどうやって知ることができますか? 公開されていない印刷ステートメントを提供し、何も表示されないためだと思います。

%c 指定子の動作に注意して man ページを読んでください。

c
幅カウント文字のシーケンスに一致します (デフォルトは 1)。次のポインターは char へのポインターである必要があり、すべての文字に十分なスペースが必要です (終端の NUL は追加されません)。 先頭の空白の通常のスキップは抑制されます。 最初に空白をスキップするには、フォーマットで明示的なスペースを使用します。

【強調追加】

1, 2 a入力が最初のスキャンのようなフォームを持っている場合、を食べて1 , 2を残し、aその時点で 2 番目のスキャンがスペースを食べます。この場合、2 番目の例どのように機能するかわかりません。

アノン。は、3 番目のケースについて有利です。

于 2010-02-10T05:00:31.710 に答える