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);
}
}
最初の処理番号を入力した所で終わってしまいます、何とか改変してくださいお願いします
補足
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
return a;するので終わってしまいます。
while(;;);
//1,2,3の場合を場合分け
if ( a == 4){
return 0; //終わり
}
}
こうすれば終わりません。
ファイルの読み込みread_all関数はa == 1の場合、
全件読み込みp_all関数ははa==2の場合に実行すればいいのではないでしょうか。
3名前を指定して実行は、p_allを拡張して、ループの中に名前を調べる判定文を追加し、
一致した名前のデータを出力する。
No.3
- 回答日時:
>最初の処理番号を入力した所で終わってしまいます
そりゃそうですよね。
せっかく作ってあるread_file関数やp_all関数を呼び出していないのですから。
また、名前から推測するに、「すべてのデータを出力する」ための関数が
p_allであるように思います。仮にそうであるとして、では、
「特定のデータを出力する」ための関数のコードはどこにありますか?
No.4
- 回答日時:
プログラムは、サンプルコードをコピー&ペーストすれば出来上がるというものではありませんので、質問を連投せずに、この質問内で分からないところを確認されて、理解した上でコードを書いて行ってみてください。
。回答いただいたアドバイスで、どの辺りが分からないのでしょうか?
入力された数値をif文で判定して、
while( 1 ) { // while文を無限にしておいて、ループ中に入力された内容によってbreakさせる。
printf( … (中略) …
scanf( … (中略) …
if (a==1) read_file(); // ファイルの読み込み
if (a==2) p_all(); // 全データの表示
// if (a==3) (個別データの表示。これは未だ作られていないので、後で追加)
if (a==4) break; // while(1) を抜けて終了する。
}
の様に組めば動く、というアドバイスです。3番の処理はちょっと込み入った処理になるので後回しにするとしても、まずは、ここまでをやってみてください。
多分、このままコンパイルすると参照が解決していないので、エラーがワーニングが出るとは思いますが…参照の解決をするために、コードの置き方を、read_file()の本体、p_all()の本体の後に、main()を置いてみてください。
int read_file(void) { …(中略) …
}
inte p_all(void) { …(中略)…
}
int main(void) { …(中略)…
}
こうすれば、関数の参照のエラーはクリアできます。
まずは、ここまで。
この回答への補足
指示通り作成いたしました、次はどうしましょう?
#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)
{
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
プログラミングの授業の課題です
-
Cでファイルの行数をカウントす...
-
#defineが使用するメモリ領域に...
-
printf による16進表示について
-
構造体メンバの初期化
-
[C言語 Windows] Visual Cでの...
-
空白を含んだ文字列がうまく格...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
タイムカードのシステムを作り...
-
C言語のプログラムで、途中で止...
-
[C]セグメンテーションエラー:...
-
終了条件Ctrl+zについて,結果表...
-
C言語でのCSVファイルの読み出...
-
C++で指定文字列のカウント方法...
-
数字以外が入力されたらエラー...
-
「指定されたキャストは有効で...
-
fgetsなどのときのstdinのバッ...
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
C言語で複数列のデータを1列の...
-
#defineが使用するメモリ領域に...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
C言語のプログラムで、途中で止...
-
プログラミングの授業の課題です
-
char型2つを結合し、short型に...
-
C言語でのCSVファイルの読み出...
-
矢印キーを押下してコンソール...
-
【C言語】全角文字の配列を、全...
-
エラーについて質問です。
-
リストの作成と出力(C言語)
-
バイナリファイル(画像)のよみ...
-
[C]セグメンテーションエラー:...
-
WinInetのInternetOpenUrl関数...
-
VC++でSQLへSELECT文を送ったの...
-
受信データから必要な部分のみ...
-
c言語で文書を読み込み、単語の...
-
reallocでエラー
おすすめ情報