C言語 途中で処理が終わってしまうのですが・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kuz

C言語 途中で処理が終わってしまうのですが・・

#1

投稿記事 by kuz » 16年前

こんばんわ。
C言語を始めたばかりの初心者です。
今まで試行錯誤してきて大体のミスとかはカバー出来たんですが、先程コンパイルしたら謎のエラー(?)が起こったので、みなさんに解決して頂きたくてここに書き込みました。

コンパイラとライブラリはVisual C++ Exprees Editionを使用してます。
問題は5人の学生の合計点と各教科の平均点を出せ、という問題があったので、プログラムを組んだのですが、
途中で処理(学生の合計点を出すまで)が終わってしまって平均点が出せなくなりました。

表はこうなってます。

学生 数学 古典 英語
 1     50    90    40
 2     80    30    50
 3     90    89    70
 4     100   75    90
組んだプログラム

#include <stdio.h>

main(){

	       int a, b, total, heikin, goukei;
	static int ten[4][3]={{50, 90, 40},
	                      {80, 30, 50},
	                      {90, 89, 70},
	                      {100, 75, 90}};

		  
	
	
	for(a=0; a<4; a++){
               total=0;

			   for(b=0; b<3; b++){
				   total+=ten[a];
			   }
			   printf("%d人目の合計点は%dです。\n", a+1, total);
		   
		   }

		   for(b=0; b<3; b++){
			   heikin=0;
			   goukei=0;
			   for(a=0; a<4; a++){
				   goukei+=ten[a];
			   }
               heikin = goukei / a;
			   
			   switch(b){
				   case '0': printf("数学の平均点は%dです。", heikin);
					   break;
				   case '1': printf("古典の平均点は%dです。", heikin);
					   break;
				   case '2': printf("英語の平均点は%dです。", heikin);
					   break;
			   }
		   }
	
		   return(0);
}



デバックした結果

1人目の合計点は180です。
2人目の合計点は160です。
3人目の合計点は249です。
4人目の合計点は265です。
続行するには何かキーを押してください...

なぜ平均点を出す所まで行かないで、合計点を出すだけで終わってしまうのでしょうか?
見づらかったらごめんなさい。。。

ランド

Re:C言語 途中で処理が終わってしまうのですが・・

#2

投稿記事 by ランド » 16年前

> case '0': printf("数学の平均点は%dです。", heikin);

'0' は 0 とは異なります。

printf("char型の0=%d 整数の0=%d", '0' , 0 ); で確認してみて下さい。

'1' , '2' も同様です。

sizuma

Re:C言語 途中で処理が終わってしまうのですが・・

#3

投稿記事 by sizuma » 16年前

>先程コンパイルしたら謎のエラー(?)
バグですね。

最後のswitchでbはint型なのに、charと比べてます。
0と'0'は違いますよ。



#かぶったです。^^;

kuz

Re:C言語 途中で処理が終わってしまうのですが・・

#4

投稿記事 by kuz » 16年前

>>ランドさん
>>sizumaさん
'0'と0とでは全く違ったんですね。
もう一度基本からやり直してみますorz

ご回答ありがとうございましたー!

box

Re:C言語 途中で処理が終わってしまうのですが・・

#5

投稿記事 by box » 16年前

> 最後のswitchでbはint型なのに、charと比べてます。

char型はint型よりも狭い範囲の整数を扱う型です。
今回のケースでは当てはまりませんが、

int b;
の定義で、

switch (b) {
case '0':
/* 以下省略 */
}

と書くことはごく普通です。

sizuma

Re:C言語 途中で処理が終わってしまうのですが・・

#6

投稿記事 by sizuma » 16年前

'0'がなんだったか忘れましたが・・・
0x0020だったかな?
↑だとしたら32を表現するときに'0'を使うということでしょうか??
僕は
>char型はint型よりも狭い範囲の整数を扱う型
として使うなら

char b;

switch(b){
case 0:
/*以下省略*/
}

とかくのは普通だと思うんですが、文字コードの数を整数として扱うのは分かりにくいんじゃないかな、と思うんですが。

non

Re:C言語 途中で処理が終わってしまうのですが・・

#7

投稿記事 by non » 16年前

>文字コードの数を整数として扱うのは分かりにくいんじゃないかな、と思うんですが。
boxさんが言われているのはそうじゃなくて、文字コードをint型で扱うことは普通ですってことです。

toyo

Re:C言語 途中で処理が終わってしまうのですが・・

#8

投稿記事 by toyo » 16年前

ここの掲示板で学んだ知識ですが
'0'はC言語ではint型(0x00000030)でC++ではchar型(0x30)になります。
'00'だとC++でもint型になります(値は0x00003030)。

sizuma

Re:C言語 途中で処理が終わってしまうのですが・・

#9

投稿記事 by sizuma » 16年前

>>文字コードの数を整数として扱うのは分かりにくいんじゃないかな、と思うんですが。
>boxさんが言われているのはそうじゃなくて、文字コードをint型で扱うことは普通ですってことです
それならありそうですね。失礼しました


>'0'はC言語ではint型(0x00000030)でC++ではchar型(0x30)になります。
>'00'だとC++でもint型になります(値は0x00003030)
文字型なのに'00'っていう表現があるんですね
そして値が0x00003030って・・・
int型で表現できるなら'0000'
とかでもいけるんでしょうね^^;


回答ありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る