fscanf_sがうまく動作しない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kero_nao

fscanf_sがうまく動作しない

#1

投稿記事 by kero_nao » 2ヶ月前

C言語でファイルを読み込む処理をしたいのですが、おかしなことになります。
ただ、while文の中にprintf文を書いて、スキャンした傍から出力すると、問題なく表示されました。
コンパイラはVisual Studioです。

コード:

int i = 0;
FILE* fp;
char chr[128][5][12];

/*データを読み込み*/
	fopen_s(&fp, "chords.dat", "r");

	while(fscanf_s(fp, "%s %s %s %s %s\n", chr[i][4], _countof(chr[i][4]), chr[i][0], _countof(chr[i][0]), chr[i][1], _countof(chr[i][1]), chr[i][2], _countof(chr[i][2]), chr[i][3], _countof(chr[i][3])) != EOF) {
		i++;
		/*ここにprintf文を入れると上手く表示される*/
	}
	c_cnt = i; /*コード数を記録*/
	fclose(fp);

	/*表示*/
	for (i = 0; i < c_cnt; i++) {
		printf("%d  %s\n", i, chr[i][4]);
		printf("\n");
	}
どなたかわかる方いらっしゃいませんか?


~chords.datの中身~
  • C C E G 0
    Cm C D# G 0
    C7 C E G A#
    CM7 C E G B
    Cm7 C D# G A#
    Csus4 C F G 0
    Cadd9 C D E G
    D D F A# 0
    Dm D F A 0
    D7 D F# A C
    DM7 D F# A C#
    Dm7 D F A C
    Dsus4 D G A 0
    Dadd9 D E F# A
    E E G# B 0
    Em E G B 0
    E7 E G# B D
    Em7 E G B D
    EM7 E G# B D
    Esus4 E A B 0
    Eadd9 E F# G# B
    F F A C 0
    Fm F G# C 0
    F7 F A C D#
    FM7 F A C E
    Fm7 F G# C D#
    Fsus4 F A# C 0
    Fadd9 F G A C
    G G B D 0
    Gm G A# D 0
    G7 G B D F
    GM7 G B D F#
    Gm7 G A# D F
    Gsus4 G C D 0
    Gadd9 G A B D
    A A C# E 0
    Am A C E 0
    A7 A C# E G
    AM7 A C# E G#
    Am7 A C E G
    Asus4 A D E 0
    Aadd9 A B C# E
    B B D# F# 0
    Bm B D F# 0
    Bm7-5 B D F A
    B7 B D# F# A
    BM7 B D# F# A#
    Bm7 B D F A#
    Bsus4 B E F# 0
    Badd9 B C# D# F#





~表示される内容~
0 E: C E G -
1 Cm: C D# G -
2 D: C E G A#
3 CM7: C E G B
4 Cm7: C D# G A#
5 CsusE: C F G -
6 G: C D E G
7 D: D F A# -
8 Dm: D F A -
9 D7: D F# A C
10 DM7: D F# A C#
11 Dm7: D F A C
12 B: D G A -
13 Dadd9: D E F# A
14 E: E G# B -
15 Em: E G B -
16 E: E G# B D
17 Em7: E G B D
18 0: E G# B D
19 Esus4: E A B -
20 Eadd9: E F# G# B
21 F: F A C -
22 Fm: F G# C -
23 F7: F A C D#
24 FM7: F A C E
25 Fm7: F G# C D#
26 Fsus4: F A# C -
27 Fadd9: F G A C
28 G: G B D -
29 Gm: G A# D -
30 G7: G B D F
31 GM7: G B D F#
32 Gm7: G A# D F
33 Gsus4: G C D -
34 Gadd9: G A B D
35 A: A C# E -
36 Am: A C E -
37 A7: A C# E G
38 AM7: A C# E G#
39 Am7: A C E G
40 Asus4: A D E -
41 Aadd9: A B C# E
42 B: B D# F# -
43 Bm: B D F# -
44 Bm7-5: B D F A
45 B7: B D# F# A
46 BM7: B D# F# A#
47 Bm7: B D F A#
48 Bsus4: B E F# -
49 Badd9: B C# D# F#

box
記事: 1712
登録日時: 7年前

Re: fscanf_sがうまく動作しない

#2

投稿記事 by box » 2ヶ月前

さしあたりお願いしたいのは、Visual Studioでビルドおよび実行ができるソースコード
(要するにくだんの結果が出るソースコード全部のコピペ)を出していただきたい、ということです。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6033
登録日時: 7年前
住所: 千葉県
連絡を取る:

Re: fscanf_sがうまく動作しない

#3

投稿記事 by みけCAT » 2ヶ月前

こちらでの実験では、提示されている出力にはなりませんでした。

コンパイラ:Visual Studio 2008

コード:

C:\Temp>cl a.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

a.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:a.exe
a.obj
コンパイルしたソースコード (a.c)

コード:

#include <stdio.h>

#define _countof sizeof

int main(void) {
int c_cnt;

int i = 0;
FILE* fp;
char chr[128][5][12];

/*データを読み込み*/
	fopen_s(&fp, "chords.dat", "r");

	while(fscanf_s(fp, "%s %s %s %s %s\n", chr[i][4], _countof(chr[i][4]), chr[i][0], _countof(chr[i][0]), chr[i][1], _countof(chr[i][1]), chr[i][2], _countof(chr[i][2]), chr[i][3], _countof(chr[i][3])) != EOF) {
		i++;
		/*ここにprintf文を入れると上手く表示される*/
	}
	c_cnt = i; /*コード数を記録*/
	fclose(fp);

	/*表示*/
	for (i = 0; i < c_cnt; i++) {
		printf("%d  %s\n", i, chr[i][4]);
		printf("\n");
	}
return 0;

}
実行結果 (標準出力)

コード:

0  C

1  Cm

2  C7

3  CM7

4  Cm7

5  Csus4

6  Cadd9

7  D

8  Dm

9  D7

10  DM7

11  Dm7

12  Dsus4

13  Dadd9

14  E

15  Em

16  E7

17  Em7

18  EM7

19  Esus4

20  Eadd9

21  F

22  Fm

23  F7

24  FM7

25  Fm7

26  Fsus4

27  Fadd9

28  G

29  Gm

30  G7

31  GM7

32  Gm7

33  Gsus4

34  Gadd9

35  A

36  Am

37  A7

38  AM7

39  Am7

40  Asus4

41  Aadd9

42  B

43  Bm

44  Bm7-5

45  B7

46  BM7

47  Bm7

48  Bsus4

49  Badd9

複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kero_nao

Re: fscanf_sがうまく動作しない

#4

投稿記事 by kero_nao » 2ヶ月前

素早いご回答、感謝いたします。
記載したソースコードに不備があったようで、大変申し訳ありません。

char型の変数をstatic char型で宣言しなおしたところ、解決いたしました。

調べたところによりますと、大きな配列を静的でないローカル変数として確保したとき、
スタックに確保されるため、スタック領域の小さい環境ではデータが落ちるようです(よく分かっていない)

皆様、どうもありがとうございました。

dic
記事: 509
登録日時: 8年前
住所: 宮崎県

Re: fscanf_sがうまく動作しない

#5

投稿記事 by dic » 2ヶ月前

あほらし

dic
記事: 509
登録日時: 8年前
住所: 宮崎県

Re: fscanf_sがうまく動作しない

#6

投稿記事 by dic » 2ヶ月前

すいません。つい書き込みました。
俺が見なければいいんですね。消えます。

dic
記事: 509
登録日時: 8年前
住所: 宮崎県

Re: fscanf_sがうまく動作しない

#7

投稿記事 by dic » 2ヶ月前

私がおとなげなかったです。気分の波があり
調子がおかしかったです。
ここでは、お世話になります。
感情的になってしまいました。すいませんでした。

返信

“C言語何でも質問掲示板” へ戻る