プロが教えるわが家の防犯対策術!

ソースはこれです。途中は省略してますが、これでいいと思っています。
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);
}

A 回答 (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:;
}

補足日時:2003/07/25 06:24
    • good
    • 0
この回答へのお礼

この度は回答していただきありがとうございました。もう一度ソースを見直し、main関数内のwhile構文を変更したところうまく直りました。ありがとうございました。

お礼日時:2003/07/25 07:43

これだけでは何とも言えません。

どのようにうまくいかないのかを補足してください。

この回答への補足

ソースはこれだけですが、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);
}

補足日時:2003/07/24 23:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!