前提
各市町村区の名前と人口が記されているテキストファイルを読み込み,標準偏差と平均値に最も近い都市名をディスプレイに表示するというものを作りたいのですが,都市名の表示がうまくされません.
実現したいこと
正しい都市名の出力
発生している問題・エラーメッセージ
平均値に最も近い都市は�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������東京都八丈支庁青ヶ島村
標準偏差は190728.0
*** stack smashing detected ***: terminated
Aborted (core dumped)
該当のソースコード
``C
ソースコード
#include<stdio.h> #include<math.h> #define N 1740 double average(int number[])/*平均値を求める*/ { double ave,all = 0; int j; for(j = 0 ; j < N; j++) all += number[j]; ave = (all)/N; return(ave); } double SD(int number[])/*標準偏差を求める*/ { int k,sd; double Dif[N], Sum = 0.0; for(k = 0 ; k < N ; k++) { Dif[k] = number[k] - average(number); Sum += ((Dif[k]*Dif[k])/N); } sd = sqrt(Sum); return(sd); } int main(void) { FILE *fp = fopen("data11.txt", "r"); int number[N],i = 0,min,l,num; char letter[N]; double Dif[N]; while(i < N) { fscanf(fp, "%s%d", &letter[i], &number[i]); Dif[i] = number[i] - average(number); if(min > fabs(Dif[i])){/*最小値を求めてそのときの添え字の保存*/ min = fabs(Dif[i]); num = i; } i++; } printf("平均値に最も近い都市は%s\n標準偏差は%.1lf\n", &letter[num],SD(number)); fclose( fp ); return 0; } ### 試したこと 試しにwhlie(i < N)の中にprintf("%s", &letter[i]);をいれたら綺麗な日本語が出力されたのですが,下から4行目のprintf("平均値に最も近い都市は%s\n標準偏差は%.1lf\n", &letter[num],SD(number));ではnumがうまく求まってないのかと思い,適当な数字をいれたりしてもうまく表示されませんでした. ###補足情報 data11.txtは以下のように都市名が並んでおり,都市名と人口の間には空白があります. 神奈川県横浜市 3777491 大阪府大阪市 2752412 愛知県名古屋市 2332176 北海道札幌市 1973395 福岡県福岡市 1612392 神奈川県川崎市 1538262 兵庫県神戸市 1525152 京都府京都市 1463723 埼玉県さいたま市 1324025 広島県広島市 1200754 宮城県仙台市 1096704 千葉県千葉市 974951 東京都世田谷区 943664 福岡県北九州市 939029 . .(省略) . 高知県土佐郡大川村 366 奈良県吉野郡野迫川村 357 新潟県岩船郡粟島浦村 353 沖縄県島尻郡渡名喜村 346 東京都大島支庁利島村 327 東京都三宅支庁御蔵島村 323 東京都八丈支庁青ヶ島村 169
回答2件
あなたの回答
tips
プレビュー