構造体と記憶領域の動的割り当てを用いてプログラムを作成するものとし、
入力された名前と点数の一覧表を求めるプログラムの宿題が学校で出たのですが、
うまくいきません。
コンパイルは正常に出来、実行もできるのですが
少し期待した動作とはずれています。
どこが間違っているのかアドバイス下さい。
プログラミング言語はC言語を使用しています。
下記にプログラムのソースを載せます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
struct inf{
char *name;
int score;
};
char buff[MAXLEN + 1];
int main()
{
int n = 0, i = 0;
struct inf *sp, *sp_a;
printf("Please input the number student > ");
scanf("%d",&n);
sp = (struct inf *)malloc(sizeof(struct inf));
//if 後で入力
sp_a = sp;
for (i = 0; i < n; i++){
printf("Please input No.%d student's name > ",i);
scanf("%s",buff);
sp->name = (char *)malloc(sizeof(char) * (strlen(buff) + 1));
strcpy(sp->name,buff);
printf("Please input No.%d student's score >",i);
scanf("%d",&sp->score);
sp++;
}
sp = sp_a;
for(i = 0; i < n; i++){
printf("No\tname\tscore\t\n");
printf("%d\t%s\t%d\n", i, sp->name, sp->score);
sp++;
}
return 0;
}
実行結果は下記の通りになりました。
Please input the number student > 3
Please input No.0 student's name > A
Please input No.0 student's score >100
Please input No.1 student's name > B
Please input No.1 student's score >40
Please input No.2 student's name > C
Please input No.2 student's score >60
No name score
0 ? 100
No name score
1 ? 40
No name score
2 C 60
最後の生徒の名前は表示されますが、
他の生徒の名前は?となっています。
自分ではどこに問題があるのかがわかりませんので、
皆様の力をお貸し下さい。
マロック関数
Re: マロック関数
一行ずつデバッグしてみましたか?これくらいならステップ実行して変数の中身を見ていけばおかしな値が入る瞬間がすぐに見付かるはずです。
是非、やってみて下さい。
是非、やってみて下さい。
Re: マロック関数
freeしていないことを原因に含むとは思えないのであります。
# mallocの読み方はマロック?何だか違和感がある。
# mallocの読み方はマロック?何だか違和感がある。