• 締切済み

プログラム

プログラムで2人の、名前と身長と体重を入力して体重と身長の入力値を出力するプログラムを作りました。 しかし、入力と出力の値が違います! このプログラムのどこが間違ってますか?教えてください! #include<stdio.h> #define NUMBER 2 typedef struct { char name[11]; double height; double weight; }student; int main(void) { int i; student a[NUMBER]; for (i=0; i<NUMBER; i++) { printf("これは %d 人目の生徒です(5人まで):\n",i+1); printf("名前を入力してください(10文字以内)\n入力された名前:"); scanf("%s",a[i].name); printf("身長を入力してください(10文字以内)\n入力された身長:"); scanf("%f",&a[i].height); printf("体重を入力してください(10文字以内)\n入力された体重:"); scanf("%f",&a[i].weight); printf("%f %f\n",a[i].weight,a[i].height); } return 0; } 実行結果 これは 1 人目の生徒です(5人まで): 名前を入力してください(10文字以内) 入力された名前:1 身長を入力してください(10文字以内) 入力された身長:1 体重を入力してください(10文字以内) 入力された体重:1 0.000000 0.000000 これは 2 人目の生徒です(5人まで): 名前を入力してください(10文字以内) 入力された名前:1 身長を入力してください(10文字以内) 入力された身長:1 体重を入力してください(10文字以内) 入力された体重:1 0.000000 0.000000 です。

みんなの回答

noname#77845
noname#77845
回答No.2

double height; double weight;  ↓ float height; float weight;

hiro3932
質問者

補足

ありがとうございます 直りました

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

scanf() のマニュアルを読むといいよ。

関連するQ&A

  • doubleとfloatについて

    #include <stdio.h> int main() { float height,weight; printf("身長と体重を入力してください。\n"); scanf("%f",&height); scanf("%f",&weight); printf("身長は%fセンチ:体重は%fキロです。\n",height,weight); return 0; } 上記のようなプログラムを作って、身長には175.1体重には56.1という入力を行なって実行したところ、 身長は175.100006センチ:体重は56.099998キロです。 という結果が返ってきました。 heightとweightをdouble型で宣言したところ(もちろんscanf文の変換仕様は%lfにしています。)、結果は 身長は175.100000センチ:体重は56.100000キロです。 と私が、期待していたものが返ってきました。なぜfloat型だと期待通りの結果が返ってこないのでしょうか?ご教授お願い致します。

  • 分割

    下記のプログラミングを Makefileを利用して分割コンパイルしたいのですが、 分割の仕方からコンパイルまで全くわからなくて手が付けられません。 どなたかよろしくお願いします。 #include <stdio.h> #include <string.h> void write_profile(FILE *fp) { double height, weight; char name[100]; printf("名前を入力してください:"); scanf("%s", name); printf("身長を入力してください:"); scanf("%lf", &height); printf("体重を入力してください:"); scanf("%lf", &weight); fprintf(fp, "Name:%s, Height:%f, Weight:%f\n", name, height, weight); printf("ファイルに書き込みました。\n"); } int main(void) { FILE *fp; fp = fopen("profile", "a"); while(1){ write_profile(fp); fclose(fp); } return(0); }

  • C言語 構造体とvectorについてです

    C言語についてこんなプログラムをつくろうとしています。内容はこんなです↓↓ 1「番号・身長・体重を入力」←番号を入力するとこで0と入力するまでループ 2「今まで入力した値の平均を出力」←身長・体重それぞれの値の平均 3「番号を入力すると対応したデータ(1で打ち込んだデータ)を出力」 4「1を入力すると出力した値の修正をする」 3と4のループをして3のところで0を入力したら終了。。。 という感じです。 わからないとこは、最初のnumberの入力でデバックエラーがおきてしまうとこ(scanf("%d",&vec[i].number);の部分がおかしい?)、2は全体的にわかりません、3と4はなんとなくわかります。 構造体とvectorを使うのがわかりやすいと思って作成中ですが完全に止まってしまいました。 できれば1と2のプログラムを作成していただけませんか?よろしくおねがいします。 int main() { float height, weight; int i, b, D, P, J, M, E, number; vector<student_list> vec; student_list num; vec.push_back(num); for(i = 0;;i++) { printf("%d人目のデータです\n番号を入力して下さい\n", i + 1); scanf("%d",&vec[i].number); if(vec[i].number == 0) { return 0; } else { printf("身長と体重を入力して下さい\n"); scanf("%f\n%f",&vec[i].height,&vec[i].weight); printf("あなたのBMIは%.1fです\n",vec[i].weight*vec[i].weight/vec[i].height); printf("電子回路の点数を入力して下さい\n"); scanf("%d",&vec[i].D); printf("プログラミングの点数を入力して下さい\n"); scanf("%d",&vec[i].P); printf("国語の点数を入力して下さい\n"); scanf("%d",&vec[i].J); printf("数学の点数を入力して下さい\n"); scanf("%d",&vec[i].M); printf("英語の点数を入力して下さい\n"); scanf("%d",&vec[i].E); printf("国数英の平均点は%dです\n",(vec[i].J+vec[i].M+vec[i].E)/3); printf("5教科の平均点は%dです\n",(vec[i].D+vec[i].P+vec[i].J+vec[i].M+vec[i].E)/5); } } }

  • C言語のプログラム組んだのですが完成させてください

    C言語のプログラムを断片的に作成したのでつなげて完成させて頂けないでしょうか? このサイトでコンパイルなど出来ます http://ideone.com/ 以下の問題を解きました また問題文の指示には必ずしたがってください。また、この文章の条件でなく、人数が4人とかそれ以外の時でも出来るようなプログラムでお願いします。 http://i.imgur.com/nuzJv2v.png http://i.imgur.com/c7f3Vh2.png http://i.imgur.com/5aCqDO0.png http://i.imgur.com/9u8hHIM.png 問題は画像になっています #include<stdio.h> #include<string.h> /*構造体型struct Dataの宣言*/ struct Data{ char name[20]; int height; double weight; } data[100]; int cnt; int main(void) { int a; do { printf("**************身長・体重の表示***************\n\n"); printf(" データファイルの読み込み・・・・・(1)\n"); printf(" 全てのデータを表示・・・・・・・・(2)\n"); printf(" 特定のデータを表示・・・・・・・・(3)\n"); printf(" 終わり・・・・・・・・・・・・・・(4)\n\n"); printf("処理番号を入力してください\n"); scanf("%d",&a); } while(a<1 || a>4); return a; } /*read_file関数の宣言*/ int read_file(void) { FILE *fp; char filename[20]; cnt=0; printf("読み込むファイルの名前を入力してください。\n"); scanf("%s",filename); fp=fopen(filename,"r"); if(fp==NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } while(fscanf(fp,"%c %d %lf",data[cnt].name,data[cnt].height,data[cnt].weight)!=EOF){ cnt++; fclose(fp); printf("ファイルを読み込みました。\n"); } return 0; } /*p_all関数の宣言*/ int p_all(void) { int i; printf("名前 身長(cm) 体重(kg)\n"); for(i=0;i<cnt;i++) { printf("%-2s %5d %.2f\n",data[i].name,data[i].height,data[i].weight); } } 最初の処理番号を入力した所で終わってしまいます、何とか改変してくださいお願いします 補足

  • C言語についてです。(困っております)

    プログラミング初心者で右も左もわからないので力になってください。 ニコニコ動画で、【第05回】ミクと学ぶC言語【if文】という動画を見ています。 その中で出てきたソースコードで、コンパイルまではうまくいくのですが コマンドプロンプトの画面で、文字を入力すると、動作を停止しました。 という通知が出てきます。 うまくできなくて困っているのでどうかわかりやすくアドバイスの程 よろしくお願いします。 ソースコードです。 ↓ /* BMI.c */ #include<stdio.h> int main(void){ double height,weight,BMI; printf("身長[ m]:"); scanf("%if",&height); printf("体重[kg]:"); scanf("%if",&weight); BMI=weight/height/height; printf("BMIは%fです。\n",BMI); if(BMI>=25){ printf("肥満です!\n"); }else if(BMI<18.5){ printf("低体重です!\n"); }else{ printf("標準です!\n"); } return 0;

  • プログラムがちゃんと動きません

    C言語です まず人数を入力した後に 名前と身長と体重を入力する関数get_psと それらの情報を人数分出力する関数print_psを使い mainで実行するというプログラムを作ったのですが 思うように動きません どのようにすればいいでしょうか? #include<stdio.h> struct ps_data{ char name[20]; double hgt; double wgt; }; void get_ps(struct ps_data *p,int a) { int i=0; printf("name height weight:"); scanf("%s %lf %lf",(p+i)->name,&(p+i)->hgt),&(p+i)->wgt); i++; } void print_ps(struct ps_data *p,int a) { int i; for(i=0;i<a;i++) printf("%s :height=%lf weight=%lf \n",(p+i)->name,(p+i)->hgt,(p+i)->wgt); } int main(void) { int n,i; struct ps_data ps_dat[20]; printf("Number:"); scanf("%d",&n); for(i=0;i<n;i++) { get_ps(ps_dat,i); } print_ps(ps_dat,n); return 0; }

  • このプログラムの処理の流れを教えて下さい

    初心者です。構造体のプログラムの勉強をしているのですが、このプログラムの処理の流れを考えたのですがよくわかりませんでした。理解を深めるために必要なので、どうかよろしくお願いします。 #include<stdio.h> #include<string.h> int main(void) { struct roll { char name[32]; float height; char bloodType[3]; }; struct roll data[128]; int i; for(i = 0;i < 128;i++){ printf("%d人目のデータ: ", i + 1); scanf("%s %f %s", &data[i].name, &data[i].height, &data[i].bloodType); if( data[i].name[0] == '0', data[i].height == 0, data[i].bloodType[0] == '0' ){ break; } } printf("名前\t身長\t血液型\n"); for(i = 0;i < 128;i++){ if( data[i].name[0] == '0', data[i].height == 0, data[i].bloodType[0] == '0' ){ break; } printf("%s\t%3.1f\t%s\n", data[i].name, data[i].height, data[i].bloodType); } } <実行例> 1人目のデータ: 太郎 175.5 A ←キーボードからそれぞれ入力する 2人目のデータ: 花子 169.0 B ←キーボードからそれぞれ入力する 3人目のデータ: 一郎 180.4 O ←キーボードからそれぞれ入力する 4人目のデータ: 0 0 0 ← 0 0 0 とキーボードから入力すると終わる 名前 身長 血液型 太郎 175.5 A 花子 169.0 B 一郎 180.4 O

  • 誰か教えてください!!

    main() { float weight,height,s_weight,fatness; int sex,count,keisu,y_cnt,f_cnt,k_cnt,c_cnt,n_cnt; y_cnt=f_cnt=k_cnt=c_cnt=n_cnt=0; printf("*** 肥満度プログラム ***\n"); for(count=1;count<=10;count++) { printf("あなたの体重(Kg単位)=\n"); scanf("%f",&weight); printf("あなたの身長(m単位)=\n"); scanf("%f",&height); printf("あなたの性別(男=0/女=1)=\n"); scanf("%d",&sex); if(sex==0) keisu=22; else keisu=20; if(height>0 && weight>0) { s_weight=height*height*keisu; printf("標準体重=%fKg\n",s_weight); fatness=(weight-s_weight)/s_weight*100; printf("肥満度=%f%\n",fatness); if(fatness<-10.0) { printf("やせすぎです。\n"); y_cnt++; } else if(-10.0<=fatness && fatness<10.0) { printf("標準です。\n"); f_cnt++; } else if(10.0<=fatness && fatness<20.0 ) { printf("過体重です。\n"); k_cnt++; } else if(20.0<=fatness) { printf("あなたは超過体重ですわ!\n"); c_cnt++; } else printf("計算できません。\n"); n_cnt++; } } printf("*** 肥満度統計結果 ***\n"); printf("やせすぎ=%d人\n",y_cnt); printf("普通=%d人\n",f_cnt); printf("過体重=%d人\n",k_cnt); printf("超過体重=%d人\n",c_cnt); printf("計算できない人=%d人\n",n_cnt); } これを実行すると、10回それぞれ身長や体重を入力していくのですが、”計算できない人”が毎回加算されてしまい、”計算できない人=10”と出てしまします。他のやせすぎとか過体重などはちゃんと計算してくれるんです。どのようにしたら、ちゃんと”計算できない人”を計算してくれるのでしょうか?

  • このCのプログラムの修正と追加してくれませんか

    完成まで近いのですが、詰まっております このサイトでコンパイルなど出来ます http://ideone.com/ 以下の問題を解きました また問題文の指示には必ずしたがってください。また、この文章の条件でなく、人数が4人とかそれ以外の時でも出来るようなプログラムでお願いします。実行結果のとおりになるようお願いします http://i.imgur.com/nuzJv2v.png http://i.imgur.com/c7f3Vh2.png http://i.imgur.com/5aCqDO0.png http://i.imgur.com/9u8hHIM.png 問題は画像になっています、実行結果も含まれています #include<stdio.h> #include<string.h> /*構造体型struct Dataの宣言*/ struct Data{ char name[20]; int height; double weight; } data[100]; int cnt; int main(void) { int a; while(1) { printf("**************身長・体重の表示***************\n\n"); printf(" データファイルの読み込み・・・・・(1)\n"); printf(" 全てのデータを表示・・・・・・・・(2)\n"); printf(" 特定のデータを表示・・・・・・・・(3)\n"); printf(" 終わり・・・・・・・・・・・・・・(4)\n\n"); printf("処理番号を入力してください\n"); scanf("%d",&a); } if (a==1){ read_file(); } if (a==2){ p_all(); } if (a==3){} if(a==4){ break; } return a; } /*read_file関数の宣言*/ void read_file(void) { FILE *fp; char filename[20]; cnt=0; printf("読み込むファイルの名前を入力してください。\n"); scanf("%s",filename); fp=fopen(filename,"r"); if(fp==NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } while(fscanf(fp,"%c %d %lf",data[cnt].name,data[cnt].height,data[cnt].weight)!=EOF){ cnt++; fclose(fp); printf("ファイルを読み込みました。\n"); } return 0; } /*p_all関数の宣言*/ void p_all(void) { int i; printf("名前 身長(cm) 体重(kg)\n"); for(i=0;i<cnt;i++) { printf("%-2s %5d %.2f\n",data[i].name,data[i].height,data[i].weight); } } int main(void) { }

  • Cのプログラムを修正、追加してくれませんか?

    C言語のプログラムを修正、追加してください このサイトでコンパイルなど出来ます http://ideone.com/ 以下の問題を解きました また問題文の指示には必ずしたがってください。また、この文章の条件でなく、人数が4人とかそれ以外の時でも出来るようなプログラムでお願いします。 http://i.imgur.com/nuzJv2v.png http://i.imgur.com/c7f3Vh2.png http://i.imgur.com/5aCqDO0.png http://i.imgur.com/9u8hHIM.png 問題は画像になっています #include<stdio.h> #include<string.h> /*構造体型struct Dataの宣言*/ struct Data{ char name[20]; int height; double weight; } data[100]; int cnt; int main(void) { int a; do { printf("**************身長・体重の表示***************\n\n"); printf(" データファイルの読み込み・・・・・(1)\n"); printf(" 全てのデータを表示・・・・・・・・(2)\n"); printf(" 特定のデータを表示・・・・・・・・(3)\n"); printf(" 終わり・・・・・・・・・・・・・・(4)\n\n"); printf("処理番号を入力してください\n"); scanf("%d",&a); } while(a<1 || a>4); return a; } /*read_file関数の宣言*/ int read_file(void) { FILE *fp; char filename[20]; cnt=0; printf("読み込むファイルの名前を入力してください。\n"); scanf("%s",filename); fp=fopen(filename,"r"); if(fp==NULL){ printf("ファイルをオープンできませんでした。\n"); return 1; } while(fscanf(fp,"%c %d %lf",data[cnt].name,data[cnt].height,data[cnt].weight)!=EOF){ cnt++; fclose(fp); printf("ファイルを読み込みました。\n"); } return 0; } /*p_all関数の宣言*/ int p_all(void) { int i; printf("名前 身長(cm) 体重(kg)\n"); for(i=0;i<cnt;i++) { printf("%-2s %5d %.2f\n",data[i].name,data[i].height,data[i].weight); } } このプログラムを while(;;); //1,2,3の場合を場合分け if ( a == 4){ return 0; //終わり } } こうすれば終わりません。 ファイルの読み込みread_all関数はa == 1の場合、 全件読み込みp_all関数ははa==2の場合に実行すればいいのではないでしょうか。 3名前を指定して実行は、p_allを拡張して、ループの中に名前を調べる判定文を追加し、 一致した名前のデータを出力する。 この文章に当てはまるように修正していただき、正しく動作するようにして頂けないでしょうか、よろしくお願いします

専門家に質問してみよう