先程の質問で教えていただき、プログラムを改善したのですが、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件)
- 最新から表示
- 回答順に表示
No.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なのです。
だから
> どうしても計算ができません。
ってのは「意味を知らないのにヘンにプログラムを書いて実行出来ない(実行のさせ方が分からない)」と言うのがかなりの確率で「あり得ます」ね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語 関数プロトタイプ宣言の...
-
C言語で台形公式を使った二重積...
-
関数におけるif文とreturn文に...
-
C言語(プログラミング)関連の質...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
数値を指数部と仮数部に分離したい
-
マチンの公式による円周率のプ...
-
至急です! マクロ定義で #defi...
-
C# 分秒表示ついて
-
c言語で、繰り返し文の中で、0....
-
C言語でdouble型の小数点の引き...
-
学校の課題で2次方程式のプログ...
-
ニュートン法
-
C言語で表記についの質問です
-
c言語の問題
-
2分法で方程式の複数の解を自...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
C言語を実行すると-infが出てき...
-
C 開放してるのにエラー(doubl...
-
至急です! マクロ定義で #defi...
-
c言語で、繰り返し文の中で、0....
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
C言語初心者 構造体 課題について
-
C言語の型による処理速度の違い
-
Cで3乗根を求める方法
-
C言語で-23乗を取り扱うには
-
2分法で方程式の複数の解を自...
-
doubleは常に%lfとするべきなのか
-
c言語のコンパイルエラー canno...
-
C言語で直角三角形の斜辺を求め...
-
C言語のプログラムで#include<m...
-
int とdoubleの比較
-
C++で外積
おすすめ情報