第3講 社員(関数)の学習その1
第10話 よくあるエラーの原因
直接関数と関係ある話題ではありませんが、
語るための材料がそろいましたので、
ここでよくあるエラー原因と対策を紹介しておきましょう。
よくあるエラー原因の事例を示しますから、原因を考えて下さい。
エラー事例を書き、その30行下に答を書くという形式でこの話は進めます。
事例1
#include<stdio.h>
int main(){
printf("出席番号 国語 社会 数学 理科 英語 合計 平均 合否判定\n");
return(0)
}
コピペ用添付ファイル
実行すると、とエラー
事例1の原因と対策
return(0)
に文を閉める;がない。
;を忘れることがエラー原因の1番です。
ですから、対策は;を忘れないようにすることです。
事例2
#include<stdio.h>
int main(){
f();
return(0);
}
void f(){
printf("今日はよい天気ですね。");
}
コピペ用添付ファイル
実行すると、エラーこそしませんが、
とというマークがついてしまっています。
異なるC言語(メーカによって少しずつ違う)は、
エラーする場合があります。というより、基本的にはエラーします。
答は30行下。
事例2でが付く原因と対策
プロトタイプ宣言を忘れています。
対策は、
#include<stdio.h>
void f();
int main(){
f();
return(0);
}
void f(){
printf("今日はよい天気ですね。");
}
プロトタイプ宣言を忘れないようにすることです。
事例3
#include<stdio.h>
int main(){
f();
return(0);
}
void f(){
prinf("今日はよい天気ですね。");
}
実行すると、
これは簡単ですからすぐ下に答を書きます。
事例3のエラー原因と対策
prinf("今日はよい天気ですね。");
スペリングミス(タイピングミス)です。
prinfではなく正しくはprintfですね。
タイピングミスが事例1の;を忘れるの次に多い原因です。
対策は、スペリングミス(タイピングミス)をしないです。
でも、人間ですから、どうしてもミスをします。
このサイトにもあちらこちらにタイピングミスがあります。
また、私が数独問題自動生成ソフトの開発をしているとき、
50題に1題の割合で答が複数ある問題を作ってしまうという欠陥の原因を、
探すのに1週間もかかってしまったことがあります。
1週間もかけて原因探索をした結果は、
何百行あるコードの中のたった1つのスペリングミスでした。
普通は、スペリングミスがあると実行エラーするのに、
そのときはたまたま実行は成功する例だったので、
なかなかスペリングミスには気がつきませんでした。
タイピングミスは、プログラマーにとって永遠の課題でしょう。
事例4
#include<stdio.h>
void f();
int main(){
f();
return(0);
}
void f(){
int a,b,c,d;
a=1;
b=2;
c=3;
d=4;
e=5;
printf("%d ",a);
printf("%d ",b);
printf("%d ",c);
printf("%d ",d);
printf("%d ",e);
}
コピペ用添付ファイル
実行すると、
答は30行下。
事例4のエラー原因
int a,b,c,d;
eの宣言忘れ。
原因の探索は、
を参考にするです。。
英語が分からなくても、
eに問題があるということが分かります。
事例5
#include<stdio.h>
void f();
int g();
int main(){
f();
g();
return(0);
}
void f(){
printf("C言語プログラムのエラー原因\n");
}
void g(){
printf("を探すのは難しい。\n");
}
コピペ用添付ファイル
実行すると、
答は30行下。
事例5のエラー原因
#include<stdio.h>
void f();
int g();
int main(){
f();
g();
return(0);
}
void f(){
printf("C言語プログラムのエラー原因\n");
}
void g(){
printf("を探すのは難しい。\n");
}
プロトタイプ宣言ミス。
事例6
#include<stdio.h>
#include<stdlib.h>
void f();
void g();
int main(){
f();
return(0);
}
void f(){
int g;
g=5;
g();
}
void g(){
printf("出席番号 国語 社会 数学 理科 英語 合計 平均 合否判定\n");
}
コピペ用添付ファイル
実行すると、
答は、30行下。
事例6のエラーと対策
void f(){
int g;
g=5;
g();
}
箱(変数)名と社員(関数)名が重なっている。
事例7
この事例は、第5講『もしもボックス(if文)の学習』で学ぶif文の事例ですが、
if文については、第2講第13話『様々な計算と略号』で触れた例の一部を変えたものです。
#include<stdio.h>
int main(){
int a,b;
a=3;
b=3;
if(a=b)printf("引き分け\n");
}
コピペ用添付ファイル
if文はまだ学んでいませんので、答をすぐ下に書きましょう。
if(a=b)printf("引き分け\n");
は正しくは、
if(a==b)printf("引き分け\n");
です。
以上をもう一回まとめておくと、
事例1
#include<stdio.h>
int main(){
printf("出席番号 国語 社会 数学 理科 英語 合計 平均 合否判定\n");
return(0)
}
コピペ用添付ファイル
実行すると、とエラー
事例1の原因と対策
return(0)
に文を閉める;がない。
;を忘れることがエラー原因の1番です。
ですから、対策は;を忘れないようにすることです。
事例2
#include<stdio.h>
int main(){
f();
return(0);
}
void f(){
printf("今日はよい天気ですね。");
}
コピペ用添付ファイル
実行すると、エラーこそしませんが、
とというマークがついてしまっています。
異なるC言語(メーカによって少しずつ違う)は、
エラーする場合があります。というより、基本的にはエラーします。
事例2でが付く原因と対策
プロトタイプ宣言を忘れています。
対策は、
#include<stdio.h>
void f();
int main(){
f();
return(0);
}
void f(){
printf("今日はよい天気ですね。");
}
プロトタイプ宣言を忘れないようにすることです。
事例3
#include<stdio.h>
int main(){
f();
return(0);
}
void f(){
prinf("今日はよい天気ですね。");
}
実行すると、
これは簡単ですからすぐ下に答を書きます。
事例3のエラー原因と対策
prinf("今日はよい天気ですね。");
スペリングミス(タイピングミス)です。
prinfではなく正しくはprintfですね。
タイピングミスが事例1の;を忘れるの次に多い原因です。
対策は、スペリングミス(タイピングミス)をしないです。
事例4
#include<stdio.h>
void f();
int main(){
f();
return(0);
}
void f(){
int a,b,c,d;
a=1;
b=2;
c=3;
d=4;
e=5;
printf("%d ",a);
printf("%d ",b);
printf("%d ",c);
printf("%d ",d);
printf("%d ",e);
}
コピペ用添付ファイル
実行すると、
事例4のエラー原因
int a,b,c,d;
eの宣言忘れ。
事例5
#include<stdio.h>
void f();
int g();
int main(){
f();
g();
return(0);
}
void f(){
printf("C言語プログラムのエラー原因\n");
}
void g(){
printf("を探すのは難しい。\n");
}
コピペ用添付ファイル
実行すると、
事例5のエラー原因
#include<stdio.h>
void f();
int g();
int main(){
f();
g();
return(0);
}
void f(){
printf("C言語プログラムのエラー原因\n");
}
void g(){
printf("を探すのは難しい。\n");
}
プロトタイプ宣言ミス。
事例6
#include<stdio.h>
#include<stdlib.h>
void f();
void g();
int main(){
f();
return(0);
}
void f(){
int g;
g=5;
g();
}
void g(){
printf("出席番号 国語 社会 数学 理科 英語 合計 平均 合否判定\n");
}
コピペ用添付ファイル
実行すると、
事例6のエラーと対策
void f(){
int g;
g=5;
g();
}
箱(変数)名と社員(関数)名が重なっている。
事例7
比較演算子の==と書くべきところを代入記号の=にしてしまう。
ミスの原因
;を忘れる プロトタイプ宣言忘れ スペリングミス(タイピングミス)
変数宣言忘れ プロトタイプ宣言と関数の型が一致しない
変数名と関数名の重複 ==を=と間違える
全角スペースまたは全角の文字が入っている(事例には挙げていませんが)
等が考えられます。
他にもいくつか原因がありますが、
折に触れて書いていきます。
第9話へ 第4講第1話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ