ファイル読み込みに就いて

[戻る]
コスモス 2002/06/04(火) 10:56:24
先週から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 2002/06/04(火) 11:02:05
ファイルは開けているか?とか、Assertionは具体的には何か、とかありますが。

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

コスモス 2002/06/04(火) 11:25:19
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);
}

コスモス 2002/06/04(火) 11:36:26
[[解決]]
すみません、自己レスです。
エラー内容を見ていくと、指定していたファイル格納場所の記述が
間違っていた為、このエラーが出ていることがわかりました。

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

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

sugar 2002/06/04(火) 11:40:29
で、fopenは成功しているのでしょうか?
Assertionが発生した時のi、jの値はいくつですか?

sugar 2002/06/04(火) 11:41:22
あら、行き違ってしまいましたね...

beginner 2002/06/04(火) 11:41:43
>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 2002/06/04(火) 11:42:59
解決してましたか・・・。

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

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

古いスレッドには追加発言できません。