スポンサーリンク
※サイト運営にサーバーは必須です※
 ~このサイトもエックスサーバー
を使用しています~
   
![]()
目次
はじめに
備忘録もかねてどのようなパターンでプログラムがエラーを吐くかメモを残しておく。
 ※私が今まで使ったことのあるプログラムの環境は「MinGW」と「Visual Studio」
単純な付け忘れ
文章の最後に「;」(カンマ)を付け忘れる。
 「;」(カンマ)と「:」(コロン)を間違える。
「{}」(かっこ)がきちんと閉じていない。
 ※「{」と「}」の数が同じでない
ひらがなモードで空白(space)の挿入。
 ※Ctrl+Fなどでプログラムの中に、余計な空白がないか検索できる
※「Visual Studio」には、インテリセンス機能がついているので、赤線で警告してくれるからすぐに気づける。
配列のミス
配列は非常にミスをしやすい部分である。
コンパイルがうまくいったのに、実行しようとすると止まるときは、まず配列を疑う。
例えば、c#で、int []array= new int [10];と宣言すると、10個の要素が宣言される。
 この場合、配列の中身は、array[0]~array[9]で指定する。
生活をしていると、ほとんど多くの物事は1からスタートしてラベル付けがされる。だが、配列に関しては、0からスタートしてラベル付けされる。このため余計、間違えやすい。つまり、array[0]~array[9]でなく、array[1]~array[10]が存在していると勘違いしてしまいがち。
特に、最大値の部分はうっかりするとミスる。
例えば以下のようなプログラムはバグる。
 ※「Visual Studio」のコンソールアプリケーションで作成
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {             int array_max;             array_max= 10;             int []array= new int [array_max];             array[array_max] = 100;             Console.WriteLine(array[array_max]);         }     } }  | 
					
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。
と警告を受ける
正しいプログラムは以下のようになる。
array[array_max]をarray[array_max-1]にする必要がある
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace error1_OK {     class Program     {         static void Main(string[] args)         {             int array_max;             array_max = 10;             int[] array = new int[array_max];             array[array_max-1] = 100;             Console.WriteLine(array[array_max-1]);         }     } }  | 
					
数字の切り捨て(キャスト)
int で数字を扱っている時に、割り算が入る場合は要注意。
例えば以下のプログラムでは正しい答えは得られず0になる
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace error2 {     class Program     {         static void Main(string[] args)         {             int x = 50;             int y;//消費税             y = x / 100 * 8;             Console.WriteLine(x+"円の消費税は" + y+"円");         }     } }  | 
					
yは4になりそうだが、プログラムの結果は0になる。

これは先に、「x / 100」の部分が評価されているためだ。
 50/100は0.5で、intで扱っているため切り捨てられて、0になる。
その後、「*8」して×8をしているが、0に8をかけても0である。
正しくは、以下のように、xを「int」でなく「double」として最初は扱ったのちに、型を「int」に戻す。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | 
						using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace error2_ok {     class Program     {         static void Main(string[] args)         {             int x = 50;             int y;//消費税             y = (int) ((double)x /100 * 8);             //y = (int)(x * 0.08);//これでも可能             Console.WriteLine(x+"円の消費税は" + y+"円");         }     } }  | 
					
関連記事
~Webサイトを自分で作ってみませんか?~
Webサイトを運営するにはサーバーが必須です。
 このサイトは、エックスサーバー 
のサーバーを使用しています。
 エックスサーバーは無料で10日間お試しができます。
