int a; で整数の変数 a を宣言したとします。
ここで a になにも操作を加えなかったら、aは空っぽのままですよね?
a の中身が空っぽかどうかを調べるにはどのようにすればよいのでしょうか?
例えば、整数aの中身を調べて、何か代入されていればそれを表示し、なにもない空っぽであればエラーを表示し終了するプログラムを書こうと思えばどのようにかけばよろしいのでしょうか?
main()
{
int a;
・・・・
if (■■)
{
printf("Error!\n");
exit(1);
}
printf("a = %d\n",a);
この if の■■に書くべきことを教えてください。
No.2ベストアンサー
- 回答日時:
C言語において空っぽの値というものはありません。
(C++なら別ですが)
C言語で変数を宣言した場合、その変数の型に必要な分だけの
メモリが確保され、変数に割り当てられます。
(例:int型なら4バイト、double型なら8バイト)
そして、確保したメモリにもともと何が入っていても特に処理をしません。
言い換えると他のプログラムなどが使っていたデータ等、予想できないものが
変数に入ることになります。
したがって、int a;と宣言しただけのaの中身はプログラムを実行するたびに変わるため
意味のないものとなります。
もし、「aに値が代入されていなければエラー」のような処理をしたいのであれば
int a = INT_MAX; // INT_MAXは最近のプログラムなら2147483647
・
・
・
if(a == INT_MAX)
{
(void)printf("Error.\n");
exit(EXIT_FAILURE);
}
printf("a = %d\n", a);
のようにaにはまず入らないであろう値を予め代入しておくのが良いと思います。
なるほど、宣言しただけの段階ではメモリに以前はいっていたものがそのままのこる場合があり、そのための初期化というものがあるのですね
大変勉強になりました。
ありがとうございます。
No.4
- 回答日時:
>この if の■■に書くべきことを教えてください。
書くべき事はありません。
通常「未初期化の変数を参照する行為」は許されません。
コンパイラによっては「未初期化の変数を参照している」として、コンパイル時にワーニング(警告)が出ます。
つまり「そんな事は出来ない」し「やっちゃいけない」のです。
因みに、未初期化の変数を参照した場合、値は不定です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
typedef enumの使い方を教えて...
-
2重定義って??
-
visualstudio C# テキストボッ...
-
VC6でlong longでエラー?
-
int void (main)の意味・・・
-
intとINTの違いは?
-
C++ クラスをメンバにもつクラ...
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
引数で argc argvが使用され...
-
C++でboolにintの値を代入する...
-
ハンドルされていない例外が発...
-
直接アドレス指定のポインタの...
-
inline
-
C言語での方向キー入力判定
-
void func( void )について
-
【#define】 defineで定義した...
-
C言語の<ctype.h>のisspace()に...
-
C言語のコンパイルエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
構造体の要素すべてに対する四...
-
typedef enumの使い方を教えて...
-
変数の型を定義しなかった場合...
-
ハンドルされていない例外が発...
-
関数の実体定義にヘッダファイ...
-
intとINTの違いは?
-
【#define】 defineで定義した...
-
C++でboolにintの値を代入する...
-
構造体の宣言でエラーが出ます。
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
void func( void )について
-
エラー「invalid conversion fr...
-
C言語 宣言した変数になにも代...
-
0除算を判定したい
おすすめ情報