第3講 社員(関数)の学習その1
第10話 よくあるエラーの原因
直接関数と関係ある話題ではありませんが、
語るための材料がそろいましたので、
ここでよくあるエラー原因と対策を紹介しておきましょう。
よくあるエラー原因の事例を示しますから、原因を考えて下さい。
エラー事例を書き、その30行下に答を書くという形式でこの話は進めます。
事例1
#include<stdio.h>
int main(){
  printf("出席番号 国語 社会 数学 理科 英語 合計 平均 合否判定\n");
  return(0)
}
コピペ用添付ファイル
実行すると、rouとエラー



























事例1の原因と対策
  return(0)
に文を閉める;がない。
;を忘れることがエラー原因の1番です。
ですから、対策は;を忘れないようにすることです。

事例2
#include<stdio.h>
int main(){
  f();
  return(0);
}
void f(){
  printf("今日はよい天気ですね。");
}
コピペ用添付ファイル
実行すると、エラーこそしませんが、
euqiqwqrというマークがついてしまっています。
異なるC言語(メーカによって少しずつ違う)は、
エラーする場合があります。というより、基本的にはエラーします。
答は30行下。



















事例2でwqrが付く原因と対策
プロトタイプ宣言を忘れています。
対策は、
#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("今日はよい天気ですね。");
}
実行すると、qqwr
これは簡単ですからすぐ下に答を書きます。

事例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);
}
コピペ用添付ファイル
実行すると、ewe
答は30行下。
























事例4のエラー原因
  int a,b,c,d;
eの宣言忘れ。
原因の探索は、
ewe
を参考にするです。。
英語が分からなくても、
eに問題があるということが分かります。

事例5
#include<stdio.h>
void f();
int g();
int main(){
  f();
  g();
  return(0);
}
void f(){
  printf("C言語プログラムのエラー原因\n");
}
void g(){
  printf("を探すのは難しい。\n");
}
コピペ用添付ファイル
実行すると、24
答は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");
}
コピペ用添付ファイル
実行すると、09
答は、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)
}
コピペ用添付ファイル
実行すると、rouとエラー

事例1の原因と対策
  return(0)
に文を閉める;がない。
;を忘れることがエラー原因の1番です。
ですから、対策は;を忘れないようにすることです。

事例2
#include<stdio.h>
int main(){
  f();
  return(0);
}
void f(){
  printf("今日はよい天気ですね。");
}
コピペ用添付ファイル
実行すると、エラーこそしませんが、
euqiqwqrというマークがついてしまっています。
異なるC言語(メーカによって少しずつ違う)は、
エラーする場合があります。というより、基本的にはエラーします。

事例2でwqrが付く原因と対策
プロトタイプ宣言を忘れています。
対策は、
#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("今日はよい天気ですね。");
}
実行すると、qqwr
これは簡単ですからすぐ下に答を書きます。

事例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);
}
コピペ用添付ファイル
実行すると、ewe

事例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");
}
コピペ用添付ファイル
実行すると、03

事例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");
}
コピペ用添付ファイル
実行すると、07

事例6のエラーと対策
void f(){
  int g;
  g=5;
  g();
}
箱(変数)名と社員(関数)名が重なっている。

事例7
比較演算子の==と書くべきところを代入記号の=にしてしまう。

ミスの原因
;を忘れる プロトタイプ宣言忘れ スペリングミス(タイピングミス)
変数宣言忘れ プロトタイプ宣言と関数の型が一致しない
変数名と関数名の重複 ==を=と間違える
全角スペースまたは全角の文字が入っている(事例には挙げていませんが)

等が考えられます。
他にもいくつか原因がありますが、
折に触れて書いていきます。



第9話へ 第4講第1話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ