🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

763閲覧

ファイルを配列に入れる時にエラーが起きる

k5nench

総合スコア0

C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/01/17 15:44

前提・実現したいこと

VisualstudioでC++を使ってファイルの中身を使って合計値や最大値を出そうという問題です。
ファイルの中身を配列に入れて計算をしていこうと考えています

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

配列に入れる段階でエラーが出てしまいます、エラーの理由が知りたいです。 エラーが出ている部分はコードのところに★を入れておきます。 0x77D6E925 (ntdll.dll) で例外がスローされました (Project50.exe 内): 0xC0000005: 場所 0x00000025 への書き込み中にアクセス違反が発生しました。

該当のソースコード

C++

1struct pStatistics { 2 char name[10]; 3 int man; 4 int woman; 5 int Sm; 6 int Sw; 7 int Mm; 8 int Mw; 9 int Lm; 10 int Lw; 11 double temp; 12 double Htemp; 13 double Ltemp; 14 int sunny; 15 int rain; 16 int snow; 17 double suntime; 18 double mm; 19 20int main(void){ 21 char head[17] = { NULL }; 22 struct pStatistics data13[47] = { NULL }; 23 int a, i, j, k; 24 25 FILE* fpHead; 26 FILE* fpData13; 27 28 fpData13 = fopen("13data.txt", "r") == NULL ; 29 if (fpData13 == NULL) 30 { 31 printf("13data.txtが開けませんでした.\n"); 32 return -1; 33 } 34 for (i = 0; i < 47; i++) 35 { 36 if (fscanf(fpData13, "%s %d %d %d %d %d %d %d %d %lf %lf %lf %d %d %d %lf %lf\n",37 data13[i].name, &data13[i].man, &data13[i].woman, &data13[i].Sm, &data13[i].Sw, 38 &data13[i].Mm, &data13[i].Mw, &data13[i].Lm, &data13[i].Lw, &data13[i].temp, &data13[i].Htemp, &data13[i].Ltemp, 39 &data13[i].sunny, &data13[i].rain, &data13[i].snow, &data13[i].suntime, &data13[i].mm)); 40 } 41 fclose(fpData13); 42}; 43 4413data.txt 45北海道 2489000 2797000 295000 282000 1502000 1551000 692000 964000 9.5 25.7 -7.6 10 157 131 1741.60 1282.00 46青森県 593000 670000 70000 67000 355000 359000 169000 243000 11 27.4 -5.1 8 172 117 1642.00 1553.00 47岩手県 598000 643000 72000 68000 356000 341000 170000 234000 11 29.4 -6.9 8 120 106 1778.10 1322.00 48宮城県 1132000 1184000 142000 135000 709000 687000 281000 362000 13.6 29.7 -2.2 20 106 63 1998.40 1082.00 49秋田県 461000 520000 50000 48000 264000 262000 147000 210000 12.3 29.2 -4 9 168 101 1526.20 2016.50 50山形県 526000 565000 65000 62000 307000 299000 154000 204000 12.6 32.8 -4.7 8 137 89 1765.00 1124.00 51福島県 923000 941000 111000 105000 559000 513000 253000 323000 14.2 33.4 -2.4 14 101 73 1915.70 828 52茨城県 1435000 1442000 179000 170000 881000 815000 376000 457000 15.3 31.9 -2.4 44 106 10 2199.10 1282.50 53栃木県 969000 977000 123000 117000 602000 558000 244000 302000 15.2 32.8 -2.8 28 101 17 2156.30 1257.00 54群馬県 965000 987000 121000 115000 589000 552000 255000 320000 16.1 33.9 -0.7 34 94 16 2381.30 1046.50 55埼玉県 3658000 3672000 456000 434000 2326000 2178000 875000 1059000 16.4 34.5 -1.2 47 86 4 2308.30 1056.00 56千葉県 3105000 3150000 383000 364000 1943000 1842000 778000 944000 17.2 32.2 1.8 30 96 17 2120.20 1261.00 57東京都 6802000 7020000 792000 758000 4630000 4453000 1380000 1808000 16.8 32.7 0.6 34 103 11 2112.20 1445.50 58神奈川県 4576000 4601000 569000 542000 2979000 2782000 1028000 1277000 17.1 32.2 2.1 34 104 6 2194.60 1573.50 59新潟県 1088000 1157000 134000 126000 647000 623000 308000 408000 14.3 31.7 -1.6 12 173 79 1698.80 1795.50 60富山県 510000 541000 63000 59000 304000 289000 143000 193000 15 32.8 -1 16 179 64 1799.50 2751.00 61石川県 555000 589000 73000 70000 339000 328000 143000 191000 15.5 32.9 -0.1 17 185 59 1880.70 2765.50 62福井県 376000 398000 51000 48000 224000 217000 101000 133000 15.3 33.7 -1.6 22 175 60 1844.40 2632.00 63山梨県 400000 417000 50000 47000 242000 231000 109000 139000 16 34.5 -2.8 38 84 6 2391.30 1153.50 64長野県 1006000 1057000 131000 124000 590000 567000 285000 365000 13 32.8 -4.6 21 110 73 2121.90 886 65岐阜県 968000 1029000 130000 123000 577000 571000 261000 334000 16.9 35.1 -0.1 43 114 28 2277.80 2087.00 66静岡県 1803000 1856000 234000 222000 1092000 1031000 478000 604000 17.7 32.7 1.3 64 106 2 2208.70 2442.00 67愛知県 3770000 3767000 513000 489000 2420000 2239000 837000 1039000 16.9 35.3 0.2 37 111 17 2330.60 1695.50 68三重県 874000 917000 113000 109000 531000 511000 230000 297000 16.9 33.2 1.2 45 108 20 2325.90 1720.00 69滋賀県 697000 715000 101000 96000 434000 418000 162000 201000 15.7 33.6 -0.4 26 127 33 2060.40 1863.00 70京都府 1238000 1353000 156000 148000 762000 777000 321000 428000 16.9 35 0.4 21 107 24 1981.80 1770.00 71大阪府 4232000 4581000 540000 516000 2643000 2693000 1048000 1372000 17.4 34.6 1.8 29 96 12 2265.60 1651.50 72兵庫県 2614000 2870000 350000 333000 1583000 1641000 682000 896000 17.4 32.7 2.1 26 97 19 2247.50 2037.50 73奈良県 631000 708000 82000 79000 369000 396000 180000 233000 16.2 34.4 -0.2 28 110 17 2065.20 1646.50 74和歌山県 440000 495000 56000 53000 255000 265000 129000 177000 17.3 33.2 1.9 28 94 19 2288.80 1950.50 75鳥取県 268000 293000 36000 35000 157000 155000 74000 103000 15.7 34.4 -0.9 22 152 48 1825.70 2183.50 76島根県 328000 352000 43000 41000 187000 178000 98000 133000 15.6 33.7 -0.7 23 148 43 1851.10 1976.50 77岡山県 912000 986000 124000 116000 544000 543000 245000 326000 16.3 34.7 -0.9 38 84 16 2229.20 1410.00 78広島県 1367000 1450000 186000 178000 830000 807000 352000 466000 16.8 34.7 1 37 81 32 2181.50 1878.50 79山口県 650000 720000 83000 79000 373000 372000 195000 270000 16 35.2 -0.9 34 108 47 2025.00 1939.50 80徳島県 351000 385000 43000 40000 203000 206000 105000 139000 17.1 33.1 1.5 35 106 12 2289.90 1760.00 81香川県 466000 496000 61000 58000 273000 267000 132000 171000 17 34.4 0.9 26 94 22 2248.10 1575.00 82愛媛県 639000 713000 83000 79000 371000 378000 185000 255000 17.1 34.4 1.7 33 90 22 2172.20 1796.50 83高知県 333000 373000 40000 39000 190000 191000 103000 143000 17.4 32.8 0.9 42 114 3 2265.00 3092.50 84福岡県 2416000 2691000 345000 329000 1483000 1543000 589000 819000 17.7 34.5 2.7 34 111 28 2094.80 1617.00 85佐賀県 388000 432000 57000 54000 228000 235000 102000 142000 17.4 35.3 1 41 105 20 2133.70 1877.00 86長崎県 631000 710000 88000 83000 364000 377000 179000 250000 17.7 33.6 2.5 31 107 21 1994.40 1821.00 87熊本県 829000 928000 120000 115000 483000 502000 226000 311000 17.5 35.6 0.5 37 100 19 2089.90 1950.50 88大分県 542000 602000 72000 69000 314000 318000 156000 215000 17.1 33.9 1.5 34 101 14 2143.30 1663.00 89宮崎県 509000 572000 74000 71000 290000 304000 145000 197000 17.8 31.6 2.4 67 131 2 2191.90 3167.50 90鹿児島県 758000 856000 111000 105000 433000 460000 215000 292000 19 33.6 3.7 34 114 9 2051.20 2397.00 91沖縄県 712000 736000 126000 121000 446000 442000 140000 173000 23.5 31.2 14.4 5 128 0 1876.50 2469.50

試したこと

いろいろ試してここまで来ています。fpData13 = fopen("13data.txt", "r") == NULL のNULLの部分がいらないという指摘を友人に受けましたが、それがないとファイルが開けなくなってしまうのでダメでした。

補足情報(FW/ツールのバージョンなど)

ファイルやコードが長くて申し訳ありません。
提出が22日までなのでよろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2021/01/18 00:47

> NULLの部分がいらないという指摘を友人に受けましたが、それがないとファイルが開けなくなってしまうのでダメでした。 > fpData13 = fopen("13data.txt", "r") == NULL ; > if (fpData13 == NULL) 開けているように思っているだけです。開けてないのに開けていることになっていずれエラーが起きます。 > 提出が22日までなのでよろしくお願いします。 焦る気持ちは分からなくもないですがそれは質問者さん側の都合です。この質問を読んだ者の心象は決してよくありません。ひとつひとつ丁寧に進めましょう。 [質問するときのヒント] https://teratail.com/help/question-tips
guest

回答1

0

まず、

struct pStatistics {

の閉じカッコがありません

char name[10];

のサイズが不足しています

そもそも、scanfを使ってファイルを読むべきではありません。
1行の文字列を読み、地道にスペース区切りで文字列を分解して変換、代入するようにコードを書きましょう

投稿2021/01/17 15:48

編集2021/01/17 15:53
y_waiwai

総合スコア88040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k5nench

2021/01/17 15:57

}の付け忘れは見逃していました、ありがとうございます。 サイズについてなのですが、不足しているというのは[]の中身の数が足りないということですよね? 漢字は2バイトなのでファイルの中を見ても最大の大きさは県を含めて4文字で8バイトだと思うのですが、それならchar[10]で足りてると思います。
y_waiwai

2021/01/17 16:01

本当に漢字は2バイトなのかチェックしておこう
k5nench

2021/01/17 16:17 編集

今調べてきました、fscanfは入力用なんですね。 教授からいただいた資料にはfopenとfcloseの説明しかなくよくわからず使っていました。 ですが友人はfscanfで課題ができているようです。またfprintfとfscanfしか習っていないのでおそらくそれ以外はつかわないのではないかと思います。
k5nench

2021/01/17 16:11

さらに調べてみました。漢字は多くの要素を必要とするので実際にやるときはchar name []とやるんですね。確認不足でした、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問