私が作成しているプログラムでは、ioリダイレクトを使用してファイルを1行ずつ読み込みます。各行はリスト内のレコードです。私は構造体のリストを出力する必要がありますが、それがwhileループの中でなければできません。これまでは、forループ(i = 0、i(lessthan)list.nused; i ++)を使用していましたが、何も印刷せずにエラーもありません。どんな助けも素晴らしいだろう、ありがとう。コードの一部です:C - whileループ以外の構造体を印刷できません
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define NAMESIZE 20
#define BLOCK 2
#define BUFSIZE 512
typedef struct {
char last[NAMESIZE];
char first[NAMESIZE];
} name;
typedef struct {
name name;
int score;
} record;
typedef struct {
record **data;
size_t nalloc;
size_t nused;
} record_list;
void list_init(record_list *list) {
list->data = NULL;
list->nalloc = list->nused = 0;
}
int make_list (record_list *list) {
int score;
size_t i;
char line[BUFSIZE];
char fname[NAMESIZE];
char lname[NAMESIZE];
while (fgets(line, BUFSIZE, stdin) != NULL) {
if (list->nalloc == list->nused) {
record *rec = realloc(list->data, (list->nalloc+BLOCK)*sizeof(record));
if (rec == 0) {
fprintf(stderr, "Unable to resize.");
clearerr(stderr);
return 1;
}
list->data = &rec;
list->nalloc += BLOCK;
}
if (fgets(line, BUFSIZE, stdin) == NULL) {
clearerr(stdin);
return 1;
}
sscanf(line, "%s %s %d", fname, lname, &score);
strcpy(list->data[list->nused]->name.first, fname);
strcpy(list->data[list->nused]->name.last, lname);
list->data[list->nused]->score = score;
list->nused = list->nused++;
//here is where it is able to print
//printf("%s\n", list->data[list->nused]->name.last);
}
//I would like it to print everything here
for (i = 0; i < list->nused; i++) {
printf("%s, %s: %d\n", list->data[i]->name.last,
list->data[i]->name.first, list->data[i]->score);
}
return 1;
}
int main(int argc, char *argv[]) {
record_list list;
list_init(&list);
make_list(&list);
}
実際にコードをコンパイルすると主張していますか? 'list'はポインタなので、' list.nused'は無効です。したがって、 'list-> nused'でなければなりません。他の 'list'フィールドへのアクセスのいくつかについても同様です。コードをコンパイルしていないか、コードの正しいバージョンではありません。 – kaylum
@kaylum申し訳ありません、今すぐコンパイルする必要があります – Bobbis
"Should" compile ??実際に試しましたか?まだ間違っていてコンパイルされません。コードをコンパイルして実行することさえ気にしないようです。それであなたが説明した行動をどうやって信じることができますか? – kaylum