ページ 11

うまく加算できません・・・

Posted: 2012年8月06日(月) 16:40
by カメロンパン
簡単な料金自動集計合計プログラムを作っています。
基本的には、年齢を入力して金額を表示。
それを繰り返して最終的には集計して表示するプログラムです。
一応作成してみたのですが、これだと集計が何人やっても最後の1人分しか表示されません。

コード:

 
#include<stdio.h>
#pragma warning(disable : 4996)

int main(void)
{
	int age, total, i=1, num, zero=0;
	//age=年齢 total=すべての合計金額 i=繰り返し・終了判定
	//金額 3歳=無料 4歳~12歳=250円 13歳以上=400円

	printf("料金表\n");
	printf("3歳以下   無料\n4歳~12歳  250円\n13歳以上  400円\n");
	//料金表

	while (i==1)
	{

	printf("年齢を打ち込んで下さい。\n");
	scanf ("%d",&age);
	//年齢打ち込み

	
	if(age>=13)
		{

			printf("料金は400円です。\n");
			total=zero+400;
			num=zero+1;
			printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
			scanf("%d",&i);
		}
		else
			if(age<=3)
			{
				printf("料金は無料です。\n");
				num=zero+1;
				printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
				scanf("%d",&i);
			}
			else
				{
					printf("料金250円です。\n");
					total=zero+250;
					num=zero+1;
					printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
					scanf("%d",&i);
					
					
				}

	}
			printf("合計人数:%02d人\n合計金額:%04d円\n\n",num,total);
		return 0;
}
なので、以下の様に+=を使用してみたのですが、デバッグ時にErrorがでて強制終了してしまいます。

#include<stdio.h>
#pragma warning(disable : 4996)

int main(void)
{
int age, total, i=1, num;
//age=年齢 total=すべての合計金額 i=繰り返し・終了判定
//金額 3歳=無料 4歳~12歳=250円 13歳以上=400円

printf("料金表\n");
printf("3歳以下   無料\n4歳~12歳  250円\n13歳以上  400円\n");
//料金表

while (i==1)
{

printf("年齢を打ち込んで下さい。\n");
scanf ("%d",&age);
//年齢打ち込み


if(age>=13)
{

printf("料金は400円です。\n");
total+=400;
num+=1;
printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
scanf("%d",&i);
}
else
if(age<=3)
{
printf("料金は無料です。\n");
num+=1;
printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
scanf("%d",&i);
}
else
{
printf("料金250円です。\n");
total+=250;
num+=1;
printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
scanf("%d",&i);


}

}
printf("合計人数:%02d人\n合計金額:%04d円\n\n",num,total);
return 0;
}

どうしたら、ちゃんと集計ができるようになりますか?

Re: うまく加算できません・・・

Posted: 2012年8月06日(月) 16:44
by カメロンパン
すいません、したのソースに[coe=C] [/code]入れ忘れました・・・

コード:

 
#include<stdio.h>
#pragma warning(disable : 4996)

int main(void)
{
int age, total, i=1, num;
//age=年齢 total=すべての合計金額 i=繰り返し・終了判定
//金額 3歳=無料 4歳~12歳=250円 13歳以上=400円

printf("料金表\n");
printf("3歳以下   無料\n4歳~12歳  250円\n13歳以上  400円\n");
//料金表

while (i==1)
{

printf("年齢を打ち込んで下さい。\n");
scanf ("%d",&age);
//年齢打ち込み


if(age>=13)
{

printf("料金は400円です。\n");
total+=400;
num+=1;
printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
scanf("%d",&i);
}
else
if(age<=3)
{
printf("料金は無料です。\n");
num+=1;
printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
scanf("%d",&i);
}
else
{
printf("料金250円です。\n");
total+=250;
num+=1;
printf("このまま続けますか?\n続けるならば1を。終了するならば2を押して下さい。");
scanf("%d",&i);


}

}
printf("合計人数:%02d人\n合計金額:%04d円\n\n",num,total);
return 0;
}

Re: うまく加算できません・・・

Posted: 2012年8月06日(月) 16:47
by エクレかわああ
最初にnumとtotalに0を代入しといてください。
何か数字を入れて初期化しておかないと、変数にはデタラメな数字が入っています。

num+=1だと

num = num + 1なので

numという初期化されてない変数にアクセスすることになりエラーになります。

Re: うまく加算できません・・・

Posted: 2012年8月06日(月) 16:55
by カメロンパン
ありがとうございます!
無事成功しました。
これからは初期化も忘れずにやっていこうと思います^^;

Re: うまく加算できません・・・

Posted: 2012年8月06日(月) 17:00
by softya(ソフト屋)
カメロンパン さんが書きました:ありがとうございます!
無事成功しました。
これからは初期化も忘れずにやっていこうと思います^^;
インデントがちゃんと出来ていませんので、初心者だからこそちゃんとやることを心がけられると良いと思います。
こちらを参考にして下さい。
「mixcpp/投稿前チェックリスト - PukiWiki」
http://uchan.net/w/index.php?mixcpp%2F% ... 5%B9%A5%C8