質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

解決済

fscanfで取り込んだ日本語を一次元配列に保存して正しくprintfで出力する方法

kakaka-014
kakaka-014

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

2回答

0リアクション

1クリップ

377閲覧

投稿2022/07/17 01:04

前提

各市町村区の名前と人口が記されているテキストファイルを読み込み,標準偏差と平均値に最も近い都市名をディスプレイに表示するというものを作りたいのですが,都市名の表示がうまくされません.

実現したいこと

正しい都市名の出力

発生している問題・エラーメッセージ

平均値に最も近い都市は�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������東京都八丈支庁青ヶ島村
標準偏差は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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

melian

2022/07/17 01:32

letter を2次元の配列に。しかし、その方法で平均値を調べても意味がない様な(変則的な移動平均?) char letter[N] => char letter[N][128] fscanf(fp, "%s%d", &letter[i], &number[i]); => fscanf(fp, "%s%d", letter[i], &number[i]); printf("平均値に最も近い都市は%s\n標準偏差は%.1lf\n", &letter[num],SD(number)); => printf("平均値に最も近い都市は%s\n標準偏差は%.1lf\n", letter[num],SD(number));
jimbe

2022/07/17 03:40 編集

コードのマークダウン内には画面表示, コードやテキストファイル(data11.txt)毎に分けて、それぞれの内容のみを入れて頂いたほうが分かり易くコピペし易いです。
kakaka-014

2022/07/17 05:21

ご指摘ありがとうございます.書式の変更と,ソースコードの変更をします.
kakaka-014

2022/07/17 05:30

質問編集の更新でエラーになってしまうので以後ご指摘いただいたことを気を付けます.

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。