fgets関数とsscanf_s関数の動きを確認するため、以下のようなコードを作って自分なりに処理の動きを解釈してみたのですが、正しいかわからないため確認していただきたいです。
標準入力で数値を受け取り、受け取った数値をそのまま出力するプログラムです。
C
1#include<stdio.h> 2 3int main(void) 4{ 5 int hoge; 6 char buf[2]; 7 8 printf("Input initial value.\n"); 9 10 for(;;) { 11 fgets(buf, sizeof(buf), stdin); 12 sscanf_s(buf, "%d", &hoge); 13 printf("hoge..%d\n", hoge); 14 } 15 16 return 0; 17}
123と入力したところ。
Input initial value. 123 //入力 hoge..1 hoge..2 hoge..3 hoge..3
と表示されました。
この実行結果を自分なり解釈すると
123と入力すると、fgetsでbufに1とナル文字が代入され残りの文字はバッファリング。
↓sscanf_sでhogeに1が代入される。
↓printfでhoge..1
を出力。
↓上と同じ流れでhoge..2
,hoge..3
が出力される。
↓最後にfgetsでbufに改行文字とナル文字が代入される。
↓bufには数字が格納されてないためsscanf_sでhogeには何も代入されない。
↓hogeは前のループで代入された3が入ったままなのでprintfでhoge..3
を出力。
となったのですが、このような解釈で正しいでしょうか。どなたかご教授ください。
C言語初学者なので用語の使い方が間違っていることがあるかもしれません。
間違いがあったら遠慮なくご指摘お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/18 11:28 編集