C言語初心者がよく起こすエラーチェック表

プログラミング

 

プログラムにおいてエラーはつきものです。

 

特に初心者は初めのころにはたくさんエラーが出てきます。実際私も始めたころはどうでもいい書き間違いや書き損じでたくさんエラーを出しました。

 

今回はC言語において初心者がプログラムを書く際にチェックしてほしい「注意するべきチェック表」を書きます。どれも私がよくやらかすエラー原因ばかりです。

 

 ; セミコロンの付け忘れ

C言語おいて、一つ一つのコードの終わりには必ず ; (セミコロン)を書きます。

 

多くの命令コードを書いているとどうしても一つや二つ書き忘れてしまいがちです。特にプログラムが慣れていないと起きる間違いです。

 

, コロンの付け忘れ

printf関数や変数を宣言する際などに、

 

int a=100 b=20;

printf(“%d  %d”,ab);

 

などのように本来間に付けるべき , (コロン)を付け忘れると様々なエラーが発生します。例えば上の例だと、整数bは定義されていないことになりprintfでbを表示することが出来ませんし、printf関数では左にある引数と右にある引数の個数が対応していないことになり、そこでもエラーが発生します。

 

正しくはこう書きます。

int a=100,b=20;

printf(“%d  %d”,a,b);

 

各命令文の{}の対応関係

関数の定義や条件文を書く時に、その範囲を{}で囲みます。

この時よく{}対応が出来ていないことでエラーが発生することがあります。

 

↑{}の対応関係がおかしいため、エラーが発生。

 

カッコの対応関係を見直します。

for文で入れ子にしているとよく起こりやすい。

等価演算子==の所が=になっている

条件演算子はfor文やif文の条件として使う演算子です。

 

条件演算子を「左右の値の等価」として扱う場合に等価演算子==を使います。その時、”等しい”という考えから=とだけ書いてしましがちです。

 

紛らわしいですが、急いでいるとやっていしましがちです。

関数名の書き間違え

これもたまにやってしまいます。

私がよくやるのが、printfやscanfなどで書く順序を間違えたり、最後の文字を書き忘れることです。

 

そうすると下の画像のように、「知らない関数が呼び出されました」とエラーが発生します。

配列の要素数を超える読み込み

配列内の要素を超える値を呼び出すとエラーが発生します。

 

配列の要素数は事前に決めておき、その範囲内で値を格納することが出来ますが、それを一つでも超えるとエラーが発生します。

 

↑予期しない数値が表示される

 

if(a<b<c)はできない

C言語の条件演算子としてa<b<cという書き方はできません。

 

数学などでよく使う表現ですが、C言語においてはこのように条件演算子による複数の値を同時に比較することが出来ません。

 

その場合は二つに分けて書く必要があります。

例えばa<b<cと書きたい場合には、a<b && b<c1などのように&&や||を使って分けて書きます。

 

終了条件がおかしくてループが終わらない

プログラムが複雑になると変数の値の変更等でループ文の終了を満たせなくなっていた、と言うことがたまにあります。

 

 

私がやった時は特に目立ったエラーが出ず、気づかずに実行したら「ループ文1ループ文2ループ文3ループ文4ループ文5ループ文6ループ文7……」と永遠にループが止らなくてびっくりしました。

 

エラーの発生は必ず起きることが前提

 

エラーの発生を予防するためにできることはソースコードの確認です。コードを書き終わったら全体のコードを見直して目立った間違いがないかを確認します。上で書いたよくある間違いもそうですが、複雑なコードはより入念に確認するのがいいでしょう。

 

しかしそれでもエラーは発生してしまうことがあります。エラーは見直しの段階でなくしていくことが理想ですが、人間は機械のように精密な判断を出来るわけではありません。どこかに見落としが発生してしまいます。よって初期のエラー発生は必ず起きる前提としてプログラムを書く必要があります。

 

エラーが発生したらまず、どこにエラーがあるのかを確認し、どう修正するべきかを判断し、実際に修正してみて、改めてコンパイルし直して確認…と、トライアンドエラーを繰り返して改善していきましょう。そのためのコンパイル(テスト)です。

 

コメント