ダイアログボックスのファイル名からファイルを読み込む


トッシ  2006-08-04 10:51:45  No: 62662

GetDialogItemTet(hWnd, IDC_FILE_NAME, filename, sizeof(filename));
fp = fopen(filename, "r");

for(j=0; j<2000; j++)
{
    fscanf(fp, "%lf %lf %lf %lf", &r_data[j][0], &r_data[j][1], &r_data[j][2], &r_data[j][3]);
}

fclose(fp);

のようにダイアログボックス内のエディットボックスにファイル名を入力し、そこから直接filenameにファイル名を読み込み、fopen(filename, "r");でファイルを開いて、r_dataに格納するという作業をしたいのですが、どうも動作が不安定です(たま〜に動いてましたが、現在は全く動きません)

実行をすると「Debug Library」が開き、「R6002 - floating point not loaded」と出るのですが、これはどのようなエラーが出るのでしょうか?
どなたかご存知の方がいらっしゃったら、教えていただけないでしょうか?
よろしくお願いいたします。


Ryo  2006-08-04 11:55:36  No: 62663

とりあえず、
バグ付近にある個人作成したところは記述されてないと
あなた以外にはわかりません
関数・変数の宣言・値や、使用してるデータなどがないと
いろいろと質問返しすることになりかねないです

たとえば、

r_data  はどんな変数として宣言してるのか。

#キーワード「R6002」で検索するのが一番楽だとは思いますが


トッシ  2006-08-06 20:11:44  No: 62664

コメントありがとうございます。
と、同時に返事遅れてすいません。

あのあと、色々調べていたのですが、どうやら全てファイル操作のところで「R6002 - floating point not loaded」のエラーが出ることが分かりました。
具体的にプログラムを以下に載せますと、
(以下において、WORD  r_data[2000][4];  で定義しています)

/////////////////////////////////////////////////////////////////////
case IDC_SET:
        GetDlgItemText(hWnd, IDC_FILE_NAME, filename, sizeof(filename));
        if((fp = fopen(filename, "r")) == NULL)
        {
                GetWindowText(GetDlgItem(hWnd, IDC_COM_HIS),  get_txt, 5000);
                wsprintf(txt, "%s", "Can not read text file…"); 
                wsprintf(set_txt, "%s\r\n%s\n", get_txt, txt);
                SetDlgItemText(hWnd, IDC_COM_HIS, set_txt);
        }

        else
        {
                GetWindowText(GetDlgItem(hWnd, IDC_COM_HIS), get_txt, 5000);
                wsprintf(txt, "%s", "Read text file!!"); 
                wsprintf(set_txt, "%s\r\n%s\n", get_txt, txt);
                SetDlgItemText(hWnd, IDC_COM_HIS, set_txt);
        }

        // データを配列に格納
        for(j = 0; j < 2000; j++)
        {
                fscanf(fp, "%lf %lf\n", &r_data[j][0], &r_data[j][1]);
        }

        fclose(fp);

        return TRUE;

////////////////////////////////////////////////////////////////////
case IDC_STOP:
        //ファイルに書き込み
        if((fp = fopen("FEEDBACK_DATA.txt","w")) == NULL)
        {
            
                GetWindowText(GetDlgItem(hWnd, IDC_COM_HIS),  get_txt, 5000);
                wsprintf(txt, "%s", "Can not write text file…"); 
                wsprintf(set_txt, "%s\r\n%s\n", get_txt, txt);
                SetDlgItemText(hWnd, IDC_COM_HIS, set_txt);
        }

        for(j = 0; j < 2000; j++)
        {
                fprintf(fp, "%lf, %lf\n", r_data[j][0], r_data[j][1]);
        }
                                        
        fclose(fp);

        return TRUE;

/////////////////////////////////////////////////////////////////////
case IDCANCEL:
        // [×]ボタンを押したときの処理
        // データを配列に格納
        if((fp = fopen("KAKUNIN.txt", "w")) == NULL)
        {
                MessageBox(NULL,"ADBoard Open Error!","ERROR",MB_SETFOREGROUND);
                                        }
                                
        for(j = 0; j < 2000; j++)
        {
                fprintf(fp, "%lf, %lf\n", r_data[j][0], r_data[j][1]);
        }
                
        fclose(fp);

        EndDialog(hWnd, 0);
        return TRUE;

/////////////////////////////////////////////////////////////////////

以上三ヶ所においてエラーが出てしまいます。
#キーワード「R6002」で検索もしましたが、いまいち原因がしぼりきれないでいます。

どなたか、分かる方がいらっしゃいましたら、ご教授いただければありがたく思います。

よろしくお願いします。


旧通りすがり  2006-08-06 20:33:20  No: 62665

fopen失敗してもそのまま突っ走っていいの?
WORDに%lfで読んだ値入れるの?


トッシ  2006-08-06 20:42:51  No: 62666

旧通りすがりさま

コメントありがとうございます。
%lfはこちらにコメントするときのミスでした。。。

また、fopenの失敗したときの中でreturn FALSEをいれたらエラーは消えました。。。
確かに言われて見ればおかしかったです。。。

実際このまま実行すると、コメントとして「Can not read text file…」と出てくるので、ファイルを読み出せていないのに突っ走っていたんですね。。。

本当にありがとうございます。

が、しかし、今度はテキストファイルが読み込めていないという自体が発生してしまいました。
どこかに原因があるはずなので、もう少し探してみたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加