
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
★????
>こうゆうことですか??
↑
全然、アドバイスした所が修正されていないけど。なぜ?
・次の点をもう一度見直して修正して下さい。
(1)fscanf() の書式制御文字(%s %d %d とか3つにします)
(2)fscanf() の引数(ここには構造体メンバを3つ渡します)
(3)if() 文の条件で calc_bmi ではなく戻り値の a で比較すべきです。
(4)else if () 文の条件式が全然直っていませんが…。→if(20<calc_bmi=<25) はエラーです。
(5)main() 関数に void data() の関数は定義できません。Java 言語ではないですから。
main() 関数の外で void data() を定義して下さい。
(6)printf() 関数では『やせすぎ』、『普通』、『肥満』の3つを表示するのに
なぜ?氏名、身長、体重を出力しているの?
質問の内容と違いますが、どちらが正しいのですか?
・順番に修正してから全ソースなどを補足などに貼り付けて下さい。
http://www9.plala.or.jp/sgwr-t/c/sec15-2.html
↑
ここのページをよく読みましょう。
そうすれば(1)、(2)はできます。
・以上。もう少し落ち着いて頑張って下さいな。
参考URL:http://www9.plala.or.jp/sgwr-t/c/sec15-2.html
この回答への補足
#include <stdio.h>
struct calc_bmi{
int sintyo,taijyu;
char name[80];
};
int main(void)
{
double a;
FILE *fp;
if ( (fp = fopen("bmi.dat","r")) != NULL ){
while ( fscanf(fp,"%s %d %d",&name,&sintyo,&taijyu) == 3 ){
a = bmi(&calc_bmi);
if(20>=a){
printf("%s %d %d やせすぎ",name,sintyo,taijyu);
}else if(20<a)&&(a=<25){
printf("%s %d %d 普通",name,sintyo,taijyu);
}else{
printf("%s %d %d 肥満",name,sintyo,taijyu);
}
}
fclose( fp );
}
return 0;
}
void data (struct calc_bmi data[],int count)
{
}
これであっているでしょうか?
(2)の構造体のメンバの渡し方がわかりません。
ページもちゃんとみたのですが…
No.6
- 回答日時:
>やってみたのですが、ものすごい数のエラーがでました。
>でいいのでしょうか??
↑
エラーが出ているので良くないです。
実際ソースを見ても構造体が使われていなかったり、if 文の条件式が正しくないです。
・まず構造体はどこに定義しているのか補足して欲しいです。
あと fscanf() の書式制御文字は引数に応じて複数指定できるので『%s,%d,%d』などと
3つにします。今回は name、sintyo、taijyu がそれぞれ文字列型、整数型、整数型なので
『%s』、『%d』、『%d』となるのです。間にカンマを入れていますが氏名、身長、体重の
データがカンマ文字で区切られていると想定してのアドバイスです。もし、空白文字で
区切られている場合は『%s %d %d』とします。
http://www9.plala.or.jp/sgwr-t/c/sec05.html を参考に。
その他:
・fscanf() で読み込んだ値(name、sintyo、taijyu)を構造体にセットしてから bmi() 関数に
渡して下さい。計算結果を calc_bmi に代入するところはあっています。
>calc_bmi=taijyu/sintyo/sintyo;
↑
この指定では構造体メンバにセットできませんよ。
・if 文の条件式
>}else if(20<calc_bmi=<25){
↑
は『20以上25未満』を想定しているようですが、このような記述はできません。
よって2つに条件式を分けます。
(1)20以上
(2)25未満
この2つの条件を AND(&&) で結合します。
・つまり、
『else if ( (1)の式 && (2)の式 )』
という感じになります。
参考文献:
・http://homepage3.nifty.com/mmgames/c_guide/index …→『苦しんで覚えるC言語』
にある
・http://homepage3.nifty.com/mmgames/c_guide/16-01 …→『異なる型の変数をまとめる』
・http://homepage3.nifty.com/mmgames/c_guide/16-02 …→『構造体の引数』
・http://homepage3.nifty.com/mmgames/c_guide/16-03 …→『構造体の配列』
・http://homepage3.nifty.com/mmgames/c_guide/16-q. …→『練習問題16』
を参照して下さい。ここにほぼ答えらしき内容が載っています。
・以上。
参考URL:http://www9.plala.or.jp/sgwr-t/c/sec15-2.html
この回答への補足
何度もすみません。
include <stdio.h>
struct calc_bmi{
int sintyo,taijyu;
char name[80];
};
int main(void)
{
double a;
FILE *fp;
if ( (fp = fopen("bmi.dat","r")) != NULL ){
while ( fscanf(fp,"%d",&name,&sintyo,&taijyu) == 3 ){
a = bmi(&calc_bmi);
if(20>=calc_bmi){
printf("%s %d %d",name,sintyo,taijyu);
}else if(20<calc_bmi=<25){
printf("%s %d %d",name,sintyo,taijyu);
}else{
printf("%s %d %d",name,sintyo,taijyu);
}
}
fclose( fp );
}
return 0;
void data (struct calc_bmi data[],int count)
{
}
}
こうゆうことですか??
No.5
- 回答日時:
> 書式は%dでいいのでしょうか?氏名は%sじゃなくてもいいのですか?
まずはやってみる。質問はそれから。
この回答への補足
やってみたのですが、ものすごい数のエラーがでました。
ファイル名はbmi.datです。
include <stdio.h>
int main(void)
{
double a;
int sintyo,taijyu,name;
FILE *fp;
if ( (fp = fopen("bmi.dat","r")) != NULL ){
while ( fscanf(fp,"%d",&name,&sintyo,&taijyu) == 3 ){
calc_bmi=taijyu/sintyo/sintyo;
a = bmi(&calc_bmi);
if(20>=calc_bmi){
printf("%s %d %d",name,sintyo,taijyu);
}else if(20<calc_bmi=<25){
printf("%s %d %d",name,sintyo,taijyu);
}else{
printf("%s %d %d",name,sintyo,taijyu);
}
}
fclose( fp );
}
return 0;
}
でいいのでしょうか??
No.4
- 回答日時:
★回答者 No.2 です。
一部訂正。場所⇒while ( fscanf("書式制御文字",&氏名メンバ,&身長メンバ,&体重メンバ) == 3 ){
修正⇒while ( fscanf(fp,"書式制御文字",&氏名メンバ,&身長メンバ,&体重メンバ) == 3 ){
※fscanf() に『fp』を忘れてしまいました。第一引数に必要でした。
・以上。
No.3
- 回答日時:
> ファイルの開け方、閉め方、fscanfなどの単語の意味はわかっていますが
ならば
struct Record {
char name[64]; /* 名前 */
double height; /* 身長 */
double weight; /* 体重 */
};
struct Record table[27];
1. ファイルを開け、
2. その内容を読み込んで table[0]~table[26] に格納し、
3. ファイルを閉じてください。
4. 確認のため、読み込まれたtable[]を全部プリントしてみてください。
5. 次に問題の関数bmi:
double bmi(struct Record* rec)
を実装します。
そこまでできたら[4]に[5]の結果を追加します。
これ以上は訊くなかれ。
"構成の方法"を示しましたから
「わからない」とは言わせません。
教科書/先生/友人を総動員して解決してください。
No.2
- 回答日時:
★アドバイス
>ファイルの開け方、閉め方、fscanfなどの単語の意味はわかっていますが、
>どういう風に書いていけばいいのかわかりません。
>構成の方法がわかりません。
↑
全体的に次のようにすれば良いでしょう。
// 肥満度の計算プログラム
int main( void )
{
double ret;
FILE *fp;
if ( (fp = fopen("ファイル名","r")) != NULL ){ ←ファイルの開け方
// 氏名,身長,体重の入力(構造体の各メンバに入力)
while ( fscanf("書式制御文字",&氏名メンバ,&身長メンバ,&体重メンバ) == 3 ){
// ここで BMI の計算(肥満度)
ret = bmi( &構造体名 ); ←ここで構造体を渡す(体重÷身長÷身長)
// ここで条件分岐(表示)
/*
肥満度は20未満が「やせすぎ」
20以上25未満は「普通」
25以上は「肥満」としています。
*/
↑
if()、else if()、else を使いましょう。
}
fclose( fp ); ←ファイルの閉め方
}
return 0;
}
以上。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語の関数のextern宣言
-
DLLファイルの逆コンパイラにつ...
-
大量のデータを読み込んで表示...
-
【C言語】全角文字の配列を、全...
-
C言語について(初心者)
-
C言語について。
-
c++でテンプレートのコードでわ...
-
C言語について。
-
VisualStudioでC++クラスを追加...
-
Windows Formアプリからコンソ...
-
visual studio 2022でのC#プロ...
-
プログラマー達は何故、プログ...
-
C言語 関数、変数の宣言について
-
c言語のリダイレクトによる円...
-
CPUが16bitでも32bitOSでコンパ...
-
0 == False はいいけど
-
プログラム言語について c言語...
-
C#でログファイルにファイルパ...
-
c言語
-
プログラミングc++を全く分か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
身長165センチの女性に質問です...
-
身長 165センチ 体重 43キロ 頭...
-
女子の中1です。身長150cm、体...
-
食事管理と運動がっつりしてダ...
-
ブラジャーのサイズ F80ってデ...
-
2ヶ月弱で13号から9号になりた...
-
ダイエット中にかくれて買い食...
-
ダイエット
-
よいダイエット方法
-
お腹やせ
-
フルーツグラノーラが、好きで ...
-
中学生です。太ってしまいました。
-
最近知った事なのですが女性に...
-
身長161cm、体重51kg、体脂肪27...
-
ダイエットと筋トレ
-
毎日ウォーキングで1時間も歩い...
-
太っている自覚があり、ダイエ...
-
リバウンド
-
日本人の消費カロリーが少ない理由
-
太ってる事がコンプレックス。...
おすすめ情報