scanf関数をつかって変数aに数値を格納するとき変数aは初期化されていても数値を受け取ることはできます

ソーラー「今日はちょっと遊んでみようかな🌞


scanf関数をつかって数値を


コンピュータのメモリに格納


コマンドプロンプト画面に表示するには


#pragma warning(disable: 4996)

#include <stdio.h>


int main(void){

int a;

printf("何か数値を入力してください。\n");

scanf ("%d",&a);

printf("入力した数値は%dです。\n",a);

return 0;

}


コンパイル結果


何か数値を入力してください。

0(と入力すると)

入力した数値は0です。(と表示されます)


👆このようにソースコードを記述していました


aの変数宣言 int a;を行い


変数aにscanf関数をつかって入力された数値を格納しています。


つまり


この場合では


変数aにscanf関数をつかって数値を格納するため


変数aの初期化は必要ないというわけなんだね。」


アレサ「はいっ そうなんですの ソーラーさん」


ソーラー「ここで


変数aに数値1を代入し初期化した


次のプログラムでは


#pragma warning(disable: 4996)

#include <stdio.h>


int main(void){

int a=1;/*変数aを初期化しました*/

printf("何か数値を入力してください。\n");

scanf ("%d",&a);

printf("入力した数値は%dです。\n",a);

return 0;

}



scanf関数は数値を受け取ることができるかな~😊」



アレサ


「もう変数aには数値1が格納されているというわけですの」


ソーラー「それでは😊~


 コンパイルっ」


コンパイル結果


何か数値を入力してください。

0(と入力すると)

入力した数値は0です。


ソーラー「普通にint a=1;と初期化していても


scanf関数をつかって


変数aに数値0を受け取ることができています。


これは実は普通のことかな?


同じようなこと


つまり


変数aに数値1が格納された状態で


変数aに数値0を代入することは


いままで たくさんおこなってきたからね。


例えば次のプログラムのように


int main(void){

int a=1;/*変数aを初期化しましta*/

printf("何か数値を入力してください。\n");

int a=0;

printf("入力した数値は%dです。\n",a);

return 0;

}


コンパイル結果


何か数値を入力してください。

入力した数値は0です。


変数aに数値1が格納された状態で


変数aに数値0を代入することは


普通にできるからね。」


アレサ「それに 変数aが初期化されていない


int a;の状態では


次のプログラムをみてもおわかりになられますように


変数aには

#pragma warning(disable: 4996)

#include <stdio.h>


int main(void){

int a;/*変数aを初期化しましta*/

printf("何か数値を入力してください。\n");

printf("入力した数値は%dです。\n",a);

return 0;

}


コンパイル結果

(統合開発環境EAZY IDECを使用した場合)

何か数値を入力してください。

入力した数値は4198543です。


(Visual Studioでは変数が初期化されていないとビルドエラーとなり


このプログラムを実行できません)



数値4198543が格納されていますから


scanf関数を使って数値0を受け取るときに


なにも代入されていない変数aに数値0を受け取っているのではなく


変数aに数値4198543が格納されている状態から


数値0をうけとっているというわけなのですね。」


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます