scanf制御長さ、printf制御長さと精度

1187 ワード

float aを定義すると;ここで、キーボードからaデータを入力するには、整数ビットが3ビット、小数ビットが2ビットの場合(A)を選択します.
A)scanf(“%6f”,&a);        B)scanf(“%5.2f”,a);   
C)scanf(“%6.2f”,&a);         D)scanf(“%f”,a);
 
なぜscanf("%3.2 f",&a);
#include
 #include
int main()
{
int k;
float f;
scanf("%3d%*4d%6f",&k,&f);
printf("%d%f",k,f);
 return 0;
}

従来scanfでは精度を制御できなかったが、scanfの%6 fは長さ6ビット(小数点を含む)の浮動小数点型データを読み出すことを示す.
 
(3)scanf()関数には精度制御がない.
例えば、scanf("%5.2 f",&a);不法です.この文で小数2桁の実数を入力しようとすることはできません.
したがって,scanfとprintfはデータ長の制御が異なり,scanfは精度を制御できず長さしか制御できず,printfは長さを制御しても精度を制御できると結論した.
 
そしてまた一つ発見しました
%*d 4は、4ビットを無視する整数を表す
そこでまた2つのdemoテストを書きました
1.上位5位を無視
#include#include int main(){ int k; scanf("%*5d%d",&k);printf("%d",k); return 0; }
123456入力後、出力結果は6
 
2.下位5位を無視
#include#include int main(){ int k; scanf("%1d%*5d",&k);printf("%d",k); return 0; }
123456入力後、出力結果は1
scanfが正しく読み込まれると、戻り値は読み込まれた変数の数と等しく、つまりいくつかの数を読み込んだだけ戻りますが、読み込みエラーが発生し、ファイルの末尾に読み込まれると、scanf関数は-1を返します.