仮引数を受け取らない関数について

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

仮引数を受け取らない関数について

#1

投稿記事 by 02 » 2年前

main関数が完成形でそれに伴って上の関数を作っていく問題。
input()で使ったnumをgoukei()でも使うためにはどうすればいいでしょうか






code
int input() {

printf("整数は何個ですか:");
scanf("%d", &num);
return num;
}
int goukei() {

int i=0;
int sum=0;
int tmp;
for (i = 0; i < num; i++) {
printf("No.%d:", i + 1);
scanf("%d", &tmp);
sum += tmp;
}
return sum;
}
void output(int num,int sum) {
printf("合計値:%d\n",sum);
printf("平均値:%2.f\n", (double)sum / num);
}
int main(void)
{
int i = 0;
int sum = 0;
int num;

num = input();
sum = goukei();
output(sum, num);

return 0;
}
/code

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 仮引数を受け取らない関数について

#2

投稿記事 by みけCAT » 2年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
([]で囲まれていない code や /code はcodeタグではありません)
02 さんが書きました:
2年前
input()で使ったnumをgoukei()でも使うためにはどうすればいいでしょうか
「仮引数を受け取らない」という条件なので、グローバル変数を使うしかなさそうですね。

コード:

#include <stdio.h>

/*
グローバル変数
input関数やgoukei関数ではローカルでnumが宣言されていないため、これが参照される。
main関数ではこれではなくローカルで宣言されているnumが参照されるが、
このローカルのnumにはinput関数から返されるグローバル変数numの値が代入されるため、問題ない。
*/
int num;

int input() {
	
	printf("整数は何個ですか:");
	scanf("%d", &num);
	return num;
} 
int goukei() {
	
	int i=0;
	int sum=0;
	int tmp;
	for (i = 0; i < num; i++) {
		printf("No.%d:", i + 1);
		scanf("%d", &tmp);
		sum += tmp;
	}
	return sum;
}
void output(int num,int sum) {
	printf("合計値:%d\n",sum);
	printf("平均値:%2.f\n", (double)sum / num);
}
int main(void)
{
	int i = 0;
	int sum = 0;
	int num;

	num = input();
	sum = goukei();
	output(sum, num);

	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

02

Re: 仮引数を受け取らない関数について

#3

投稿記事 by 02 » 2年前

みけCATさん返信ありがとうございます。
グローバル変数でやったらできました!わざわざありがとうございます。

box
記事: 2002
登録日時: 13年前

Re: 仮引数を受け取らない関数について

#4

投稿記事 by box » 2年前

グローバル変数でやったらできました!
そのくらいの小さいプログラムならばまだいいですが、
ある程度以上の規模のプログラムではグローバルはなるべく使わない方が
無難だと思います。
なぜなら、どの関数からでも参照・変更ができてしまうので、
思わぬところで変更されていたりするとそれを見つけるのが
なかなかむずかしかったりしますから。
その辺の危険性をよくわかった上で使ってください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

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