実現したいこと
csv形式でファイルから読み込んだものを重連結リストに格納する
前提
この部分をファイルにしたいです。 ### 発生している問題・エラーメッセージ csv形式でファイルから読み込んだものを重連結リストに格納仕方がわからない ### 該当のソースコード ```c #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct __Soccercheck // 構造体 { int Ranking; // ランキング char Name[256]; // 選手の名前 char Team[256]; // チーム名 int Age; // 年齢 char Country[256]; // 国籍 int Number; // ゴール数 int Games; // 出場試合数 struct __Soccercheck *next; struct __Soccercheck *prev; } Soccercheck; Soccercheck *append(Soccercheck *tail, int rank, const char *name, const char *team, int age, const char *cou, int num, int game) // データを格納する関数 { Soccercheck *x = malloc(sizeof(Soccercheck)); x->Ranking = rank; strcpy(x->Name, name); strcpy(x->Team, team); x->Age = age; strcpy(x->Country, cou); x->Number = num; x->Games = game; x->next = tail->next; x->prev = tail; tail->next->prev = x; tail->next = x; tail = tail->next; return tail; } void dis(Soccercheck *tmp){ printf("サッカープレミアリーグ得点ランキング %2d 選手名 %s チーム名 %s 年齢 %d 国籍 %s ゴール数 %2d 出場試合数 %d\n", tmp->Ranking, tmp->Name, tmp->Team, tmp->Age, tmp->Country, tmp->Number, tmp->Games); printf("発見したデータに対応する構造体のアドレスは以下の通り。\n"); // アドレスの表示 printf("Ranking: %p\n", &tmp->Ranking); printf("Name: %p\n", &tmp->Name); printf("Team: %p\n", &tmp->Team); printf("Age: %p\n", &tmp->Age); printf("Country: %p\n", &tmp->Country); printf("Number: %p\n", &tmp->Number); printf("Games: %p\n", &tmp->Games); } int main(void) { Soccercheck *dommy = (Soccercheck *)malloc(sizeof(Soccercheck)); // ダミーノード Soccercheck *head = dommy; Soccercheck *tail = dommy; dommy->next = dommy; dommy->prev = dommy; tail = append(tail, 1, "ハーランド", "マンチェスターC", 22, "ノルウェー", 36, 33); tail = append(tail, 2, "ケーン", "トットナム", 29, "イングランド", 27, 36); tail = append(tail, 3, "トニー", "ブレントフォード", 27, "イングランド", 20, 33); tail = append(tail, 4, "サラー", "リバプール", 30, "エジプト", 19, 36); tail = append(tail, 5, "C・ウィルソン", "ニューカッスル", 31, "イングランド", 18, 29); tail = append(tail, 6, "ラッシュフォード", "マンチェスターU", 25, "イングランド", 16, 33); tail = append(tail, 7, "ウーデゴール", "アーセナル", 24, "ノルウェー", 15, 35); tail = append(tail, 7, "マルティネリ", "アーセナル", 21, "ブラジル", 15, 36); tail = append(tail, 9, "ワトキンス", "アストンビラ", 27, "イングランド", 14, 35); tail = append(tail, 10, "サカ", "アーセナル", 21, "イングランド", 13, 36); tail = append(tail, 11, "ロドリゴ", "リーズ", 32, "スペイン", 12, 29); tail = append(tail, 11, "バーンズ", "レスター", 25, "イングランド", 12, 32); tail = append(tail, 11, "ミトロビッチ", "フラム", 28, "セルビア", 12, 22); tail = append(tail, 14, "アルミロン", "ニューカッスル", 29, "パラグアイ", 11, 32); tail = append(tail, 15, "ガブリエル・ジェズス", "アーセナル", 26, "ブラジル", 10, 24); tail = append(tail, 15, "イサク", "ニューカッスル", 23, "スウェーデン", 10, 20); tail = append(tail, 15, "ソン・フンミン", "トットナム", 30, "韓国", 10, 34); tail = append(tail, 15, "フォーデン", "マンチェスターC", 22, "イングランド", 10, 29); tail = append(tail, 15, "マディソン", "レスター", 26, "イングランド", 10, 28); tail = append(tail, 15, "マック・アリスター", "ブライトン", 24, "アルゼンチン", 10, 32); tail = append(tail, 15, "エゼ", "クリスタルパレス", 24, "イングランド", 10, 36); tail = append(tail, 22, "フィルミノ", "リバプール", 31, "ブラジル", 9, 23); tail = append(tail, 22, "ヌニェス", "リバプール", 23, "ウルグアイ", 9, 29); tail = append(tail, 24, "トロサール", "アーセナル", 28, "ベルギー", 8, 34); tail = append(tail, 24, "アウォニイ", "ノッティンガム・フォレスト", 25, "ナイジェリア", 8, 25); tail = append(tail, 24, "ジョンソン", "ノッティンガム・フォレスト", 21, "ウェールズ", 8, 36); tail = append(tail, 24, "イングス", "ウエストハム", 30, "イングランド", 8, 33); tail = append(tail, 24, "アルバレス", "マンチェスターC", 23, "アルゼンチン", 8, 28); tail = append(tail, 24, "ギュンドアン", "マンチェスターC", 32, "ドイツ", 8, 30); tail = append(tail, 24, "ウォード・プラウズ", "サウサンプトン", 28, "イングランド", 8, 36); tail = append(tail, 24, "グロス", "ブライトン", 31, "ドイツ", 8, 34); tail = append(tail, 32, "三笘", "ブライトン", 25, "日本", 7, 30); int num = 0; Soccercheck *tmp = head->next; while (num != 8) // numが5の時終了 { printf("\nどのような操作をしますか?\n 1:一覧表字、2:検索(名前), 3:検索(チーム名), 4:検索(国名), 5:検索(ランキング), 6:検索(年齢), 7:削除, 8:終了 ->"); scanf("%d", &num); switch (num) { case 1: { // 一覧表字 tmp = head->next; while (1) { printf("サッカープレミアリーグ得点ランキング %2d 選手名 %s チーム名 %s 年齢 %d 国籍 %s ゴール数 %2d 出場試合数 %d\n", tmp->Ranking, tmp->Name, tmp->Team, tmp->Age, tmp->Country, tmp->Number, tmp->Games); tmp = tmp->next; if (tmp == head) break; } } break; case 2: { // 名前検索 char seek[10000]; printf("誰のことを知りたいですか?"); scanf("%s", seek); tmp = head->next; while (1) { if (strcmp(tmp->Name, seek) == 0) { dis(tmp); break; } tmp = tmp->next; if (tmp == head) // 該当するデータが見つからなかった時 { printf("\n%sさんのデータは見つかりませんでした。", seek); break; } } } break; case 3: { // チーム名検索 char team[10000]; printf("どのチームのことを知りたいですか?"); scanf("%s", team); tmp = head->next; while (1) { if (strcmp(tmp->Team, team) == 0) { dis(tmp); break; } tmp = tmp->next; if (tmp == head) // 該当するデータが見つからなかった時 { printf("\n%sさんのデータは見つかりませんでした。", team); break; } } } break; case 4: { // 国名検索 char cou[10000]; printf("どの国の人を知りたいですか?"); scanf("%s", cou); tmp = head->next; while (1) { if (strcmp(tmp->Country, cou) == 0) { dis(tmp); break; } tmp = tmp->next; if (tmp == head) // 該当するデータが見つからなかった時 { printf("\n%sさんのデータは見つかりませんでした。", cou); break; } } } break; case 5: { // ランキング検索 int rank = 0; printf("何位の人を知りたいですか?"); scanf("%d", &rank); tmp = head->next; while (1) { if (tmp->Ranking == rank) { dis(tmp); if (tmp->next->Ranking != rank) break; } tmp = tmp->next; if (tmp == head) // 該当するデータが見つからなかった時 { printf("\n%d位の人のデータは見つかりませんでした。", rank); break; } } } break; case 6: { // 年齢検索 int age = 0; printf("何歳の人を知りたいですか?"); scanf("%d", &age); tmp = head->next; int count=0; while (1) { if (tmp->Age == age) { dis(tmp); count++; } tmp = tmp->next; if (tmp == head) // 該当するデータが見つからなかった時 { if (count == 0){ printf("\n%d歳の人のデータは見つかりませんでした。", age); } break; } } } break; case 7: { // データの削除 char erase[10000]; printf("誰のデータを削除しますか?\n"); scanf("%s", erase); printf("%sさんのデータを削除します。\n", erase); tmp = head->next; while (1) { if (strcmp(tmp->Name, erase) == 0) { tmp->prev->next = tmp->next; tmp->next->prev = tmp->prev; free(tmp); tmp = head->next; while (1) { printf("サッカープレミアリーグ得点ランキング%d, 選手名%s, チーム名%s, 年齢%d, 国籍%s ゴール数%d, 出場試合数%d\n", tmp->Ranking, tmp->Name, tmp->Team, tmp->Age, tmp->Country, tmp->Number, tmp->Games); tmp = tmp->next; if (tmp == head) break; } break; } tmp = tmp->next; if (tmp == head) // 該当するデータが見つからなかった時 { printf("\n%sさんのデータは見つかりませんでした。", erase); break; } } } break; case 8: { printf("処理を終了します。"); } break; default: // 1〜7以外の数字がnumに入力された時 printf("numの値が不正です\n"); } } return 0; }