ファイル読み込みに就いて – プログラミング – Home

ファイル読み込みに就いて
 
通知
すべてクリア

[解決済] ファイル読み込みに就いて


コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

先週からC言語を始めた超初心者です。
まだ右も左も分からない未熟者ですがよろしくお願いします。

現在ファイル操作を行っています。
そこで、
パターン[A]
パターン[B]



パターン[L]
パターン[M]
というファイルがあり、これを読み込み
char mPtnData[12][64];
という多次元配列に格納しようとしています。

そこで、以下のようなコードを書いたのですが、
このファイルを読み込んで配列に格納できません。

どなたかアドバイスをいただけませんでしょうか?
お願いいたします。

#include <stdio.h>
#define SYSPTN_FILE C:\\研修\\C言語\\csvsep\\work\\c_sysptndata

char mPtnData[12][64];

void Yomikomi(void);

void main(int argc, char *argv[])
{
Yomikomi();
}

void Yomikomi(void)
{
FILE *fp;
int c,i,j;

/*c_systpndataファイルを開く*/
fp=fopen(SYSPTN_FILE,r);

/*c_systpndataファイル読み込み*/
for (j=0;j<13;j++){
for (i=0;(c=fgetc(fp))!=EOF;i++){
          ↑ここで「Debug Assertion Faild!」というエラーが出ます..。
mPtnData[j][i];
}
}
fclose(fp);
}


引用未解決
トピックタグ
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

ファイルは開けているか?とか、Assertionは具体的には何か、とかありますが。

取り敢えずうまくいっているとして、
このソースでは内側のループだけでファイルの終わりまで行ってしまいますね。


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

PAI様、早速のレスありがとうございます。

具体的な「Debug Assertion Faild!」のエラー内容は以下の通りです。

 Program:C:\\研修\\C言語\\csvsep\\work\\c_sysptndata
Filegetc.c
Line41

Expression:stream!=NULL

For information on how your program
Can cause an assertion failure,see
the Visual C++ documentation on asserts

コードは思い切り間違っておりました。
お恥ずかしいです。

少し書き直してみました。
デバッグをして動きを確かめたいのすが、上記のエラーのために
動きが分かりません...。
少し頭がパニックになってきてしまいましたので頭を冷やしてみます。

またアドバイスをいただけるのでしたらよろしくお願いいたします。

void Yomikomi(void)
{
FILE *fp;
int i,j;
char c;

/*c_systpndataファイルを開く*/
fp=fopen(SYSPTN_FILE,r);

/*c_systpndataファイル読み込み*/
for (j=0;j<13;j++){
for (i=0;((c=fgetc(fp))!='\n');i++){
mPtnData[j][i] = c;
}
}
//ファイルのクローズ
fclose(fp);
}


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

すみません、自己レスです。
エラー内容を見ていくと、指定していたファイル格納場所の記述が
間違っていた為、このエラーが出ていることがわかりました。

これを訂正すると、ファイルが開け配列に無事内容を格納する事ができました。

お騒がせして申し訳ありませんでした。
今後も度々質問させていただくと思いますが、またよろしくおねがいいたします。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

で、fopenは成功しているのでしょうか?
Assertionが発生した時のi、jの値はいくつですか?


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

あら、行き違ってしまいましたね...


返信引用
beginner
 beginner
(@beginner)
ゲスト
結合: 23年前
投稿: 63
 

>char mPtnData[12][64];
と宣言してるんですよね?しかし

for (j=0;j<13;j++){
for (i=0;((c=fgetc(fp))!='\n');i++){
mPtnData[j][i] = c;
}
}
の部分でjは12まで増えますが、実際に確保されてる領域は
mPtnData[0][64]
.
.
.
mPtnData[11][64]
なので、おかしくなってるのでは?

あってるのかなぁ。自信ないですが・・・

#質問するのは大いに結構だと思いますが、デバッグはしてますか?
#まずは怪しいところにブレークを貼ってデバッガを使ってみましょう


返信引用
beginner
 beginner
(@beginner)
ゲスト
結合: 23年前
投稿: 63
 

解決してましたか・・・。


返信引用
コスモス
 コスモス
(@コスモス)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

行き違いになってしまったみたいで申し訳ありません。
デバッグはたどたどしいながらもやっています。
ただ、今回はブレークポイントをはって、ステップイン、ステップオーバーを
しようとするとエラーが出てきてしまったのでどうにもならずに質問させていただきました。
ご迷惑をおかけして本当に申し訳ありません!!

そして、きちんとデバッグしてみるとやはりおかしな動きをしてしまいました。
ここには「解決」マークをつけてしまったで、新たに質問させていただきました..。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました