プロが教えるわが家の防犯対策術!

Cでプログラミングの勉強をしています。

double型で宣言した変数をprintfで出力するとき、代入した数値は小数点以下1桁なのに、なぜか出力結果では6桁になると問題集に書かれていました。解説はありません。

プログラムは下のものですが、なぜかお分かりになる方、教えていただけませんか?

#include<stdio.h>
struct test{
int x;
double y;
}
void print(struct test a);
void set_value(struct test a);

void main(void){
struct test a ={1, 2.0};
set_value(a);
print(a);
}
void print(struct test a){
printf("a.x = &d, a.y= %f\n", a.x, a.y);
}
void set_value(struct test a){
a.x =10;
a.y =20.0;
}

A 回答 (3件)

単に桁数を指定していないからです。


何も指定しない場合、 printf は小数点以下を
6桁表示するようになっています。
そもそも、double は浮動小数点数なので
保持する桁数は予め決まっています。

後ついでに細かいミスをなどを、、、

[1] 最後のセミコロンを忘れています。
struct test {省略};

[2] &d ではなく %d です。
printf("a.x = %d, a.y= %f\n", a.x, a.y);

[3] \n ではなく \n です。
printf("a.x = %d, a.y= %f\n", a.x, a.y);

[4] set_value はポインタ渡しで。
int main() {
set_value(&a);
}
void set_value(struct test *a) {
a->x = 10;
a->y = 20.0;
}
    • good
    • 0
この回答へのお礼

ありがとうございます!

セミコロンを忘れたり、演算子?(%d)を間違えたり、はたまたポインタ渡しをミスしたりと前途多難ですが、がんばっていきます。

お礼日時:2009/09/30 18:45

小数点以下の桁数ではなく


有効数字の桁数であれば
議論の対象になると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

議論がしたかったのではなくて、単純に私に知識がなくて、問題集に解説がなくて、身近に誰もC言語を知っている人がいなかったので質問しました。
気分を害されていたらごめんなさい。

お礼日時:2009/09/30 18:48

ど~してもわからなければ規格を読む.

    • good
    • 0
この回答へのお礼

ありがとうございます。

規格…が何のことか分からないですが、初心者用の問題集で躓いていますのでお許しください。

お礼日時:2009/09/30 18:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!