う~ん、どっちがいい書き方なんでしょうか。
ちょっと迷ったのでメモとして残しておきます。
問題
1からnまでの整数値の2乗値を表示する単純なプログラム。
ただキャストするか否かで方法が二通り出たが、どっちがいいのかいまいちピンとこない。
方法1
#include <iostream>
#include<math.h>
int main()
{
int no,i;
printf("整数値:");
scanf_s("%d", &no);
for (i = 1; i <= no; i++) {
printf("%dの2乗は%.0f\n",i,pow(i,2)); //printf("%dの2乗は%d\n",i,(int)pow(i,2));
}
}
単純にpow関数の値をdouble型として表示させる方法。
pow(double a, double b)はdouble型として値を返すので「%f」で返すだけ。
方法2
#include <iostream>
#include<math.h>
int main()
{
int no,i;
printf("整数値:");
scanf_s("%d", &no);
for (i = 1; i <= no; i++) {
printf("%dの2乗は%d\n",i,(int)pow(i,2));
}
}
方法には(int)pow(double a, double b)として計算結果を整数型にしてしまう方法。
ただ入力が整数値とは限らないからやっぱりまずいかな。
あとあと表示のいじりやすさというか汎用性を考えると「%.nf」(n=const)として定義しておいた方がいいのかな。
こういう違いはバグにはつながらんのだろうか?