hahaha111
@hahaha111

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

これでも動く理由はなぜ?

Q&A

初心者の僕には判断が難しいです。m__m
『←ここ』に注目してほしいのです.
参考にした動画では初期化をしていますが、
ただ『x』としてあげるだけでも動きます、、
初期化した方が良い理由でもあるのでしょうか。
そして x=1 としている理由もよく分かりません。


参考にした動画から写したコード

double test(double x){
        double pi=3.14159265;
        double y=0;
        y = x * x * pi;
        return y;
    }
    int main(void){
        double x=1;      //←ここ
        double y=0;
        printf("半径を入力してください。");
        scanf("%lf",&x);
        y=test(x);
        printf("半径%lfcmの円の面積は%lfです。",x,y);
        return 0;
    }

初期化しなくても動くコード

double test(double x){
        double pi=3.14159265;
        double y=0;
        y = x * x * pi;
        return y;
    }
    int main(void){
        double x;      //←ここ
        double y=0;
        printf("半径を入力してください。");
        scanf("%lf",&x);
        y=test(x);
        printf("半径%lfcmの円の面積は%lfです。",x,y);
        return 0;
    }
0

3Answer

参考にした動画では初期化をしていますが、
ただ『x』としてあげるだけでも動きます、、

載せられているコードのように、xをコード中で利用する前(test関数のところで)に値を設定する(scanfのところ)場合は、初期化しない場合もありますし、それでも問題なく動きます。

初期化した方が良い理由でもあるのでしょうか。

初期化しない変数はどんな値が入るか分からないから初期化する、というのが初期化する一番大きい理由だと思います。
この辺りは、C言語 変数 初期化などで検索してみると色々出てくるはずです。
以下一例になります。
https://program-shoshinsya.hatenablog.com/entry/2018/05/22/173908

そして x=1 としている理由もよく分かりません。

これはよく分からないですね・・。どうせその後のscanfで値を設定するので何でもいい気がします。

1Like

Comments

  1. @hahaha111

    Questioner

    解決です!ありがとうございます!!!

そして x=1 としている理由もよく分かりません。

doubleとして認識されない値を入力するとscanfの戻り値が0となり、xの値は変更されません。
そのため、不正入力のときには1を使うように初期化しているのではないでしょうか。

半径を入力してください。hogehoge
半径1.000000cmの円の面積は3.141593です。
1Like

ctrl - d などの制御文字を入力すると、xが不定値のままで処理が進んでしまいますね

0Like

Comments

  1. @hahaha111

    Questioner

    解決です!ありがとうございます!!!

Your answer might help someone💌