ページ 1 / 1
無題
Posted: 2010年10月18日(月) 00:05
by 合計
以前も同じ質問をさせて頂いたのですが・・・
もう一度助けてくださいww
数値を入力していき、
0が入力されたら合計値をだす(サブルーチンにて)
プログラムを作成したいのですが・・
#include <stdio.h>
#define MAX100
int function(int *a)
void main(void)
{
int a[MAX];
int b;
int sum;
printf("数値を入力して下さい\n");
b = 0;
do{
scanf("%d",&a);
}
while(a[b-1] ll (b<MAX));
return 0;
}
int function(int *a)
{
int b;
int sum =0;
b = 0;
sum = sum +a;
b++;
printf("合計%d\n",sum);
}
すげえ間違えまくってると思います・・・
↑な感じで作るにはどう修正したら良いでしょうか。。
Re:無題
Posted: 2010年10月18日(月) 03:12
by パコネコ
#include <stdio.h>
#define MAX100 //スペースは?
int function(int *a) //;?
void main(void)
{
int a[MAX];
int b;
int sum;
printf("数値を入力して下さい\n");
b = 0;
do{
scanf("%d",&a);
//b++?
}
while(a[b-1] ll (b<MAX));//順番逆のほうがいいかも
//functionは使わないんですか?おそらく[sum=function(a);]
return 0; //voidになってますが…
}
int function(int *a)
{
int b;
int sum =0;
b = 0;
//ループ欲しいですね…
sum = sum +a;
b++;
printf("合計%d\n",sum);
//int宣言なのに…returnは?
}
とりあえず間違ってそうなところチャック入れてみました。
何か勘違いがあった場合はすいません…。
それはそうと…起動されたときに100回も入力する気ですか?
大変なので回数を減らすか、ランダムにすべて代入させましょう。
(初めからそのつもりならすみません)
Re:無題
Posted: 2010年10月19日(火) 00:38
by 霜焼け
私からも2点
1つは、配列aの初期化をしないと、0を入力してループから抜けた(100回入力していない)時にfunction関数内で初期化前のゴミが入った変数を参照してしまいます。
2つ目は、0を入力してループを抜けるなら、while(a[b-1] ではなく、
forでループさせて
if(a==0){break;}で脱出の方が良いと思います
Re:
Posted: 2010年10月20日(水) 16:12
by ゆーずぃ
静的変数を使えばaを配列にする必要はなくなりますよ~。
もしも無理にメインループ内でやりたいなら別ですけど、その処理は短くしようと思えばこれだけで済みます。
#include <stdio.h>
void Sum(void){
int value, sum;
value = sum = 0;
do{
puts("数値を入力して下さい");
scanf("%d",&value);
sum = sum + value;
}while(value);
printf("合計%d", sum);
}
void main(void){
Sum();
}
ですが、最初のうちは自分で考える事が大事なので、パコネコさんのダメ出しをよく読んで自分なりのプログラムを必ず完成させてください。私のはこんな考え方もある、という考え方の参考程度でお願いします。
Re:
Posted: 2010年10月20日(水) 22:21
by box
> 静的変数を使えば
ところが、お書きになったサンプルコードでは
使っている形跡がありません。
質問者さんが混乱をきたしそうです。
Re:
Posted: 2010年10月22日(金) 18:19
by ゆーずぃ
>boxさん
私のは別の考え方の参考として見てほしかったので、あえて使わなかったのですが、確かに混乱してしまうかもしれませんね。boxさん、質問者さん、すみませんでした。
ちょっと時間が無いので静的変数でのサンプルは書きませんが、質問者さんからの要望があれば書きます。
ですが質問者さんの書き込みが無いところをみると捨て板かもしれないので大丈夫そうですね。