アプリ版:「スタンプのみでお礼する」機能のリリースについて

先程の質問で教えていただき、プログラムを改善したのですが、argvで入力された数値を、呼び出してそれを計算させるプログラムなのですが、上手く計算されません。コンパイルした時にエラーは出ないのですが、どうしても計算ができません。
どこを直せばちゃんと計算できるプログラムになるのでしょうか?分かる方、詳しい方教えていただけたらと思いますm(_ _)m

付け足しですが、argc、argv、ポインタを使うことをこのプログラムは条件とされているので、このようなプログラムになっています。

#include<stdio.h>
#include<stdlib.h>
double func(double a, double b){
double c,d,e,*i,*k;

i=&a;
k=&b;

c=*i/(*k * *k);
printf("BMIは%lfです\n",c);

d=*k * *k*22;
printf("標準体重は%lfkgです\n",d);

e=(*i-d)*100/d;
printf("肥満度は%lf%です\n",e);

if(25<c){
printf("肥満です。痩せましょう。\n");
}

if((18.5<=c) && (c<=25)){
printf("普通です。このままいきましょう。\n");
}

if(c<=18.5){
printf("痩せてます。もっと食べましょう。\n");

}
return 0;
}

int main(int argc, char *argv){

double func(double a, double b);
double a,b,c,d,e;
printf("体重を入力[kg]\n");
printf("身長を入力[m]\n");
scanf("%10s",&argv[0]);
scanf("%10s",&argv[1]);


return func(argv[0],argv[1]);
}

A 回答 (2件)

うーん、前述の「二つのプログラム」を何も考えずに混ぜましたね(笑)。



何度も同じ事書くのもアレなんでチェック項目書いていきますが。

#include<stdio.h>
#include<stdlib.h>
double func(double a, double b){ /* 「出力が目的」なら関数が返すのはvoidであるべき */
double c,d,e,*i,*k;

i=&a;
k=&b;

c=*i/(*k * *k);
printf("BMIは%lfです\n",c);

d=*k * *k*22;
printf("標準体重は%lfkgです\n",d);

e=(*i-d)*100/d;
printf("肥満度は%lf%です\n",e);

if(25<c){
printf("肥満です。痩せましょう。\n");
}

if((18.5<=c) && (c<=25)){
printf("普通です。このままいきましょう。\n");
}

if(c<=18.5){
printf("痩せてます。もっと食べましょう。\n");

}
return 0; /* これは要らない */
}

int main(int argc, char *argv){/* argvのポインタ型がおかしい */

double func(double a, double b); /* これはおかしい。要らない。 */
double a,b,c,d,e; /* これも要らない */
printf("体重を入力[kg]\n"); /* これも要らない */
printf("身長を入力[m]\n"); /* これも要らない */
scanf("%10s",&argv[0]); /* これもいらない */
scanf("%10s",&argv[1]); /* これも要らない */


return func(argv[0],argv[1]); /* OSにプログラムが正常終了したと伝えるのにこれはおかしい。
しかもargvで与えられるのは「文字列」であって「数値」じゃないです。変換が必要です。 */
}

あとは直すのは任せますが、その前に非常に重要な事を貴方は知らないのにやろうとしてる。
コマンドライン引数ってわかりますかね?分からなければすぐさま教科書を読んで該当箇所を探して下さい。
argcやargv使う時にプログラム内でわざわざscanfなんぞ使う必要がない。

例えばプログラムをコンパイルしてデフォルトのa.outと言う実行形式を得たとします。
実行する時

a.out 45 1.58

のように「プログラムに引数を与えて呼び出す為の機構」がコマンドライン引数で、そのためのC言語のmain関数のargcとargvなのです。
だから

> どうしても計算ができません。

ってのは「意味を知らないのにヘンにプログラムを書いて実行出来ない(実行のさせ方が分からない)」と言うのがかなりの確率で「あり得ます」ね。
    • good
    • 0

これでどうして「上手く計算できる」と思ったのか, 説明してもらえないでしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!