search
LoginSignup
1
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

【プログラミング初心者向け】上手くいかなかっ時に確認したいミス集

はじめに

大学で質問を受けたりするんですが,本当に初めたばかりだと何を確認すべきかわからないらしいです
ってことで注意すべき点をまとめました

プログラム中にあるバグ

全角文字

コメントを書いたときに全角を切り忘れてインデントで全角スペースを含んでしまったり
プログラムファイル名を全角文字にしてターミナルで反応しなかったりバグの温床です
(ちなみに絶対パスの時のフォルダ名に全角が入っていてもバグの要因になりえます)
個人的にはコメントなども英語とかで書くことをお勧めします(一人で書くなら)

区切り文字忘れ

C言語で言うところの「;」です
区切り文字のない言語(Pythonなど)に慣れた後だと特に忘れがちです

継続行の忘れ

VBでいうところの「_」です
継続行を使うこと自体が少ないので意外と忘れがちです

括弧の数が合わない

if文やループ文を消したり拡張したときに括弧がズレたりして合わなくなるケースです
インデントすれば一発でわかるので最初は面倒ですがインデントする習慣を付けましょう

ゼロスタート

配列 array[n] を制限した場合,ゼロスタートの言語では array[0]~array[n-1]までを用意したことになります
ここで array[n] を呼び出そうとしてエラーになることがあります

最後の処理

改行文字

C言語のprintfなどで文字を表示した後に改行し忘れるケースです
Javaのprintlnのように改行もセットになっている関数は忘れにくいです

終了コードを返さない

C言語で言うところのmain関数の「return 0(EXIT_SUCCESS)」
コンパイラによっては警告だけで終わり,自動補完してくれますが
プログラミングコンテストなどではランタイムエラーとなります

予約したメモリ領域を開放し損ねる

C言語で言うところの「malloc」です
メモリが扱える言語がそもそも少ないのでC/C++の時は注意が必要です
これもコンパイラに補完してもらえることがほとんどですが,バグの元なので正しく書きましょう

その他

文字エンコード

保存するソースコードの文字エンコードとターミナルの文字エンコードが異なれば
日本語などが文字化けしたり,コメント中の全角文字が反応してコンパイルできなかったりします

宣言の仕方

私が見た希少な例ですが

test1.c
  int x = 0;
  int y = 2 * x + 3;

  x = 3;
  printf("%d\n",y);
  return 0;

たぶんy=2*3+3=9としたかったんでしょうけど
「=」は方程式を表すものではないので
注意しましょう

test1-a.c
  int x = 0;
  int y;

  x = 3;
  y = 2 * x + 3
  printf("%d\n",y);
  return 0;

こんなのもありました

test2.c
  int i;
  int n;
  int N;
  int f[N];

  n = 10;

  f[0] = 1;
  f[1] = 1;
  for(i = 2; i < n; i++){
    f[i] = f[i-1] + f[i-2];
  }
  printf("%d\n",f[n-1]);

フィボナッチ数列を書きたかったのかもしれませんが配列の宣言がおかしいです(gccで何故か通ってました)

test2.c
  int i;
  int n;

  int f[10];

  f[0] = 1;
  f[1] = 1;
  for(i = 2; i < n; i++){
    f[i] = f[i-1] + f[i-2];
  }
  printf("%d\n",f[n-1]);

こう書くかmallocなどで必要なメモリ分予約するべきです

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?