(C言語)この課題がわかりません
以下の問題に手こずっています。回答宜しくお願いします。
実行結果を以下のように表示させたいのですが、できません。
私は、ソースコードを以下のように組み立ててみました。修正コードとなぜそうなるのか解説を詳しく記入していただけると理解できると思います。
地区コード| 地区名 | 人口(人) | 面積(km2)|人口密度|
1 | 東北地方 | ××× | ××× |××× |
lang
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4//都道府県構造体 5typedef struct { 6 char kcode[3]; //都道府県コード 7 char lcode; //地区コード 8 char kname[9]; //都道府県名 9 int jinko; //人口(人) 10 double area; //面積(km2) 11} TDFK; 12//地方構造体 13typedef struct { 14 char lcode; //地区コード 15 char lname[9]; //地区名 16 double ljinko; //人口(人) 17 double larea; //面積(km2) 18} CHIKU; 19/*** 関数 ***/ 20void readKen(TDFK ken[]); 21int printMenu(void); 22void sortKen(TDFK ken[]);//面積の広い順 23void printKen(TDFK ken[]); 24void printChiku(TDFK ken[]); 25void sortArea(TDFK ken[]); 26int printMenu(void); 27void readKen(TDFK); 28 29int main(void){ 30 TDFK ken[47]; //47都道府県データ 31 CHIKU chi[7]; //7地区のデータ 32 int i, j; 33 int chiku //入力する地区コード 34 char selno; //処理番号 35 readKen(ken); 36 do{ 37 selno = printMenu(); 38 switch(selno){ 39 case 1: 40 readKen(ken);//再読み込み 41 break; 42 case 2: 43 sortKen(ken); 44 break; 45 case 7: 46 printMitudo 47 break; 48 case 7: 49 printChiku(ken); 50 break; 51 case 10: 52 printKen(ken); 53 break; 54 } 55 }while(selno != 99); 56 57 return 0; 58} 59void 60void printChiku(TDFK ken[]){ 61 //地区コードを入力し、その地域の都道府県を表示する。 62 CHIKU ch[7] = { 63 { '1', "東北地方"}, 64 { '2', "関東地方"}, 65 { '3', "中部地方"}, 66 { '4', "近畿地方"}, 67 { '5', "四国地方"}, 68 { '6', "中国地方"}, 69 { '7', "九州地方"}}; 70 int i; 71 int chiku; //入力する地区コード 72 char wklcode; 73 74 //地区コードを入力し、地方名を表示する 75 printf("*** 地区コードと地方名 ***\n\n"); 76 for(i = 0; i < 7; i++){ 77 printf("%c:%8s\n", 78 ch[i].lcode, ch[i].lname); 79 } 80 //地区コードの入力 81 do{ 82 printf("地区コード-> "); 83 scanf("%d", &chiku); 84 }while(chiku < 1 || chiku > 7); 85 wklcode = chiku + '0'; 86 87 printf("%sの都道府県\n", ch[chiku - 1].lname); 88 for(i = 0; i < 47; i++){ 89 if(ken[i].lcode == wklcode){ 90 printf("%s %c %-10s\n", 91 ken[i].kcode, ken[i].lcode,ken[i].kname); 92 } 93 } 94 95} 96 97void printKen(TDFK ken[]){ 98 int i; 99 100 //都道府県データ表示 101 for(i = 0; i < 47; i++){ 102 printf("%s %c %-10s %8d %06.2f\n", 103 ken[i].kcode, ken[i].lcode,ken[i].kname, 104 ken[i].jinko, ken[i].area); 105 } 106 107 108} 109void sortKen(TDFK ken[]){ 110 int i,j; 111 TDFK wkken; 112 113 //都道府県コードの昇順に並び替える 114 //基本選択法 115 for(i = 0;i < 46; i++){ 116 for(j = i + 1; j < 47; j++){ 117 if(strcmp(ken[i].kcode , ken[j].kcode) > 0){ 118 wkken = ken[i]; 119 ken[i] = ken[j]; 120 ken[j] = wkken; 121 } 122 } 123 } 124 125 126} 127void printChiku(TDFK ken[]){ 128 int i,j; 129 TDFK wkken 130 131} 132//都道府県ファイルの入力 133void readKen(TDFK ken[]){ 134 FILE *fin; //入力ファイルポインタ 135 int i; 136 137 //入力ファイルのオープン 138 fin = fopen("都道府県別人口と面積.txt", "r"); 139 if(fin == NULL){ 140 printf("File Open Error\n"); 141 exit(0); 142 } 143 i = 0; 144 while(fscanf(fin, "%s %c %s %d %lf", 145 ken[i].kcode, &ken[i].lcode,ken[i].kname, 146 &ken[i].jinko, &ken[i].area) != EOF){ 147 i++; 148 } 149 //ファイルのクローズ 150 fclose(fin); 151 152} 153//メニュー表示 154int printMenu(void){ 155 int num; 156 157 printf("*---------- 都道府県データ統計メニュー ----------*\n"); 158 printf("* *\n"); 159 printf("* 1: ファイルの再読込み *\n"); 160 printf("* 2: ソート(都道府県コードの昇順) *\n"); 161 printf("* 3: ソート(人口の多い順) *\n"); 162 printf("* 4: ソート(面積の広い順) *\n"); 163 printf("* 5: 都道府県別人口密度 *\n"); 164 printf("* 6: 地域別人口密度 *\n"); 165 printf("* 7: 地域別の都道府県データ表示 *\n"); 166 printf("* 8: *\n"); 167 printf("* 9: *\n"); 168 printf("* 10: 47都道府県データ表示 *\n"); 169 printf("* *\n"); 170 printf("* 99: 終了 *\n"); 171 printf("*------------------------------------------------*\n"); 172 printf("処理番号を選択して下さい\n"); 173 printf("番号入力 --> "); 174 scanf("%d", &num); 175 176 return num; 177} 178/*ヒント 179no = ken[i].lcode - '0'; 180↑数値 ↑char型 181ch[ no ].ljinko += 182 ken[i].jinko;*/ 183/*ヒント2 184地区コード| 地区名 | 人口(人) | 面積(km2)|人口密度| 185 1 | 東北地方 | ××× | ××× |××× |
こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています
わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。