ソースはこれです。途中は省略してますが、これでいいと思っています。
int aで指定した構造体に....[a].nameで文字を表示したいのですが、以下のようではうまくいきません。
宜しくお願いします。
struct classmatedata
{
char name[15];
int age;
char sex[1];
struct seiseki ten;
}classmate[member];
inline void classdata::outputseiseki()
{
int a;
printf("成績を表示します。 番号=");
scanf("%d",&a);
printf("名前=%s\n",classmate[a].name);
printf("国語=%d 社会=%d 数学=%d 理科=%d 英語=%d\n",classmate[a].ten.kokugo,classmate[a].ten.syakai,classmate[a].ten.sugaku,classmate[a].ten.rika,classmate[a].ten.eigo);
}
No.2ベストアンサー
- 回答日時:
main()関数がないのでどのように呼び出したのかがわからないのですが、おそらくdatacntを初期化していないのが原因ではないかと思います。
classdata::inputclass()でデータを入力するのでしょうが、datacntを設定しているコードが見当たりません。この回答への補足
main関数のファイルはこれです。ありがとうございます。やってみます。
---------------------------------------------
#include"classdata.h"
#include<stdio.h>
void loop_sub();
void main()
{
classdata cdata;
int whi;
while(1)
{
printf("0:終了 1:入力 2:表示 3:ソート 4:セーブ 5:ロード 6:成績 =");
scanf("%d",&whi);
switch(whi)
{
case 0:
goto _exit;
break;
case 1:
cdata.inputclass();
break;
case 2:
cdata.outputclass();
break;
case 3:
cdata.sortclass();
break;
case 4:
cdata.saveclass();
break;
case 5:
cdata.loadclass();
break;
case 6:
loop_sub();
break;
default:
break;
}
}
_exit:;
}
void loop_sub()
{
classdata cdata;
int loop;
while(1)
{
printf("0:終了 1:成績入力 2:成績表示 =");
scanf("%d",&loop);
switch(loop)
{
case 0:
goto _exit_sub;
break;
case 1:
cdata.inputseiseki();
break;
case 2:
cdata.outputseiseki();
break;
default:
break;
}
}
_exit_sub:;
}
この度は回答していただきありがとうございました。もう一度ソースを見直し、main関数内のwhile構文を変更したところうまく直りました。ありがとうございました。
No.1
- 回答日時:
これだけでは何とも言えません。
どのようにうまくいかないのかを補足してください。この回答への補足
ソースはこれだけですが、inline void classdata::outputseiseki()を使うと画面にint a で選択した構造体のchar nameを表示するという仕組みをしたかったのです。ですが、実際は
成績を表示します。 番号=
scanf("%d",&a);
名前=
となるだけでした。
成績を表示します。 番号=
scanf("%d",&a);
名前= classmate[a].name
としたかったです。
説明が足りませんでした。すみませんでした。
それから、早速の回答ありがとうございます。
#include<stdio.h>
#include<iostream>
#include<string.h>
#define member 40
#define filename "data.txt"
class classdata
{
private:
int datacnt;
struct seiseki
{
int kokugo;
int syakai;
int sugaku;
int rika;
int eigo;
};
struct classmatedata
{
char name[15];
int age;
char sex[1];
struct seiseki ten;
}classmate[member];
public:
inline void classdata::inputclass();
inline void classdata::outputclass();
inline void classdata::sortclass();
inline void classdata::saveclass();
inline void classdata::loadclass();
inline void classdata::inputseiseki();
inline void classdata::outputseiseki();
};
inline void classdata::inputclass()
{
printf("個人情報を入力します。\n");
printf("name= ");
scanf("%s",classmate[datacnt].name);
printf("age= ");
scanf("%d",&classmate[datacnt].age);
printf("sex= ");
scanf("%s",classmate[datacnt].sex);
datacnt++;
}
inline void classdata::outputclass()
{
printf("個人情報を表示します。\n");
int a;
for(a=0;a<datacnt;a++)
{
printf("番号=%d 名前=%s 年齢= %d 性別=%s\n",a,classmate[a].name,classmate[a].age,classmate[a].sex);
}
}
inline void classdata::sortclass()
{
int m,n;
for(m=0;m<datacnt-1;m++)
{
for(n=m+1;n<datacnt;n++)
{
if(strcmp(classmate[m].name,classmate[n].name)>0)
{
classmatedata tmp;
tmp=classmate[m];
classmate[m]=classmate[n];
classmate[n]=tmp;
}
}
}
}
inline void classdata::saveclass()
{
FILE *stream;
stream=fopen(filename,"wb");
fwrite(classmate,sizeof(classmatedata),datacnt,stream);
fclose(stream);
}
inline void classdata::loadclass()
{
FILE *stream;
datacnt=0;
stream=fopen(filename,"rb");
while(1)
{
if(fread(&classmate[datacnt],sizeof(classmatedata),1,stream)<1)break;
datacnt++;
}
fclose(stream);
}
inline void classdata::inputseiseki()
{
int a;
printf("成績を入力します。 番号=");
scanf("%d",&a);
printf("名前=%s\n",classmate[a].name);
printf("国語=");
scanf("%d",&classmate[a].ten.kokugo);
printf("社会=");
scanf("%d",&classmate[a].ten.syakai);
printf("数学=");
scanf("%d",&classmate[a].ten.sugaku);
printf("理科=");
scanf("%d",&classmate[a].ten.rika);
printf("英語=");
scanf("%d",&classmate[a].ten.eigo);
}
inline void classdata::outputseiseki()
{
int a;
printf("成績を表示します。 番号=");
scanf("%d",&a);
printf("名前=%s\n",classmate[a].name);
printf("国語=%d 社会=%d 数学=%d 理科=%d 英語=%d\n",classmate[a].ten.kokugo,classmate[a].ten.syakai,classmate[a].ten.sugaku,classmate[a].ten.rika,classmate[a].ten.eigo);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10個出力で改行したいのですが...
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
【C言語教えてください】sin波...
-
scanfに文字が入力されたときに...
-
ガウスの消去法、後退代入について
-
C言語プログラミング
-
defineで定数が置き換えられな...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
分数を表示するプログラム(長...
-
switch分のケースを範囲数?に...
-
カレンダーのプログラムについて
-
C言語初心者です。次の問題で質...
-
C言語です
-
じゃんけんゲームの応用
-
BMI値から体型を判定するプログ...
-
(C言語)めちゃくちゃな値にな...
-
なぜgccはstdio.hをインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報