テキストファイルからの数値の読み込みについて

このQ&Aのポイント
  • C言語の初心者で、Microsoft Visual C++ 6.0 を使用しています。テキストファイルから数値を読み込むことに関して質問です。
  • テキストファイルから数値を読み込んだとき、正しい結果として-0.0266377が表示されるはずですが、もとのファイルをコピーしたファイルからは-9.25596e+061が表示されてしまいます。
  • さらに、正しく読める元ファイルとコピーしたファイルの違いを調べても、違いはありませんでした。質問者は現在Cのコンパイラしか使用できず、FortranのプログラムをCに変換しています。
回答を見る
  • ベストアンサー

テキストファイルからの数値の読み込みについて

C言語の初心者で、Microsoft Visual C++ 6.0 を使用しています。 テキストファイルから数値を読み込むことに関して質問です。 下記のプログラムでテキストファイルを読み込んだとき <正しい結果> -0.0266377 Press any key to continue と実行結果がなるはずですが、もとのファイルをコピーしたファイルから 読み込むと <誤った結果> -9.25596e+061 Press any key to continue となってしまいます。またエディターで適当な数値のテキストファイルを 作っても同様なトラブルが生じます。目下、Cのコンパイラしか無い 状況下でFortranのプログラムをCに変換しています。 下記のxをint,floatで定義した場合も異なった値を出力します。 エディターで、正しく読める元ファイルとコピーしたファイルの違いをしらべ ても、違いはありませんでした。  宜しくご教授のほど御願いします。 --------------------------- #include <iostream.h> #include <fstream.h> int main() { double x; ifstream fin("a:\data.txt"); fin >> x; cout << x << endl; fin.close(); return 0; } ----------------------------

  • skk
  • お礼率94% (56/59)

質問者が選んだベストアンサー

  • ベストアンサー
  • TMINET
  • ベストアンサー率32% (45/140)
回答No.1

いまいち言語がはっきりしていないのですがC言語ですか?C++ですか? #include <stdio.h> #include <stdlib.h> int main(){ FILE *fp; char buf[512]; double x; fp = fopen( "FILE_NAME", "r" ); if( fp == NULL ){ return -1; } if( fgets( buf, sizeof(buf), fp ) == NULL ){ return -1; } x = atof(buf); printf("%0.7lf",x); fclose( fp ); return 0; } C言語ならこんな書き方で良いと思います。確認とってませんが。

skk
質問者

お礼

教えて頂いたプログラムで、最所 fp = fopen( "c:\data\test.txt", "r" ); としていたので、うまくいかなかったのですが fp = fopen( "c:/data/test.txt", "r" ); とすることにより、正しく実行することができました。 ありがとうございました。今後とも宜しく御願いします。

skk
質問者

補足

早々の御教示、感謝致します。 CかC++かを明記せず申し訳ありませんでした。 Microsoft Visual C++ 6.0 はどちらもコンパイル できるのでCでも大丈夫です。問題はテキストファイルから の読みとりです。 御教示頂きましたプログラムを走らせた結果、もとの テキストファイルに関しては次のように正しい結果 を得ましたが -0.0266377Press any key to continue しかし、もとのファイルをコピーしたファイルとエディタ(メモ帳) で作ったファイルに対しては次のような、結果となり数値は 出力されませんでした。 Press any key to continue 再度、御教示願いたいと存じます。宜しく御願いします。

関連するQ&A

  • ファイルの読み込みと書き込み

    はじめまして。 最近プログラムを勉強し始めたのですが、ファイルの書き込みと 読み込みで行き詰ってしまいました。 ファイルAで演算したものをファイルBで読み込み表示したいと思い、 以下のようなプログラムを作成したのですが、エラーが出てしまいます。 かなり初歩的なこととは思いますが、アドバイスをお願いします。 【ヘッダファイル(stdafx.h)】 #include <stdio.h> #include <tchar.h> #include <fstream> #include <iostream> 【ソースファイルA】 #include "stdafx.h" using namespace std; int main() { int a; cout << "数値入力:" ; cin >> a; a = a * 2; ofstream fout("sample.txt"); fout << a; fout.close(); return 0; } 【ソースファイルB】 #include "stdafx.h" using namespace std; int main() { ifstream fin("sample.txt"); fin >> a;     fin.close(); int b; b = a; cout << "結果 = " << b << '\n'; return 0; }

  • visual basic6.0でのテキストファイルからの読み込みについて。

    vb初心者です。 数値をテキストファイルに保存しています。その数値は、x方向に10個、y方向に3個、つまり10列3行の数値を保存しています。 そのデータを2次元配列 D(x,y)として読み込みたいのです。 for x=0 to 9, for y=0 to 2 と範囲を指定して、数値全部を読み込むときは、D(x,y)の値は正しく入っているのですが、 ある範囲だけを読み込みたいとき、たとえば for x=0 to 5, for y=0 to 1 としたとき、D(x,y)は別の数値が読み込まれてしまいます。 これは、テキストファイルの数値が配列になっていないということですよね?? どうすれば、テキストファイルの数値を2次元配列として読み込むことができるのでしょうか? 文章が解りにくくてごめんなさい!!よろしくお願いします! 

  • ファイルが開かない

    こんにちは、最近C言語の入門書を読み とあるプログラムをつくったのですが、思ったようになりません。 そのプログラムは typ1 という名前でこのようになっています。 #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fin; char buf[256]; char filename[80]; printf("入力ファイル名を指定してください="); gets(filename); fin = fopen("filename", "r"); if(fin == NULL) { printf("%sをオープンできません\n", filename); exit(1); } while(fgets(buf, 256, fin) != NULL){ printf("%s", buf); } fclose(fin); return 0; } となっており、プログラムを起動して指定したファイルを読み込んで、その内容を画面に出力するというものです。読み込み用ファイル(名前はsmp1)はメモ帳でつくっており、内容はアルファベットを一行目に、1から9の数字を二行目に書いて、アプリケーションのtyp1.exeがあるDebugというディレクトリと同じ場所に保存しております。 このプログラムはVisual Studio net 2003で作っおり エラー等はなく正常に動くのですが読み込むファイル(この場合smp1)を指定しても 入力ファイル名を指定してください=smp1.txt smp1.txtをオープンできません。 Press any key to continue となってしまいます。  読み込み用ファイルの場所が適切ではないのでしょうか? どなたか教えてください。

  • 繰り返し条件について2

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=947566で質問させていただいたものです。新たな問題が発生してしまいした。 char jouken; do{ 処理 printf("--Press any key to exit(Press 'c' to continue)--"); scanf("%c",&jouken); }while(jouken=='c'); や、 do{ 処理 printf("--Press any key to exit(Press 'c' to continue)--"); }(getchar()=='c'); でプログラムを作ったら一回しか繰り返しが出来ないんです。1回目の処理をして、cを入力すれば、繰り返しになりますが、二回目の処理が終わると全ての処理が終わってしまいます(Press any key to continueとでます)。 何がいけないんでしょうか? MSVC++でc++で作成しています。

  • 修正箇所の指摘のお願い(文字列の書き出し)

    C++についての質問です。 あるテキストファイルを読み込み、行頭の空白文字(スペース)を 削除して、別のテキストファイルへ書き出すプログラムを 作成しています。 下記のようにコーディングを行いましたが、 読み込みファイルの1行目が書き出されず、最終行が2回 書き出される状態となってしまいました。 お手数ですが、修正箇所を教えて頂けないでしょうか。 ************************************************************ #include <iostream> #include <string> #include <fstream> using namespace std; #define INPUT_FILE "C:\\input.txt" #define OUTPUT_FILE "C:\\output.txt" int main() { ifstream fin(INPUT_FILE); ofstream fout(OUTPUT_FILE); char str[255]; if(!fin) { cout << "入力ファイルを開けません\n"; return 1; } if(!fout) { cout << "出力ファイルを作成できません\n"; return 1; } fin.getline(str,254); while(!fin.eof()) { std::cin.setf( std::ios::skipws ); // スペースの読み飛ばし fin >> str; fout << str << std::endl; } fin.close(); fout.close(); return 0; } ************************************************************ よろしくお願いします。

  • テキストファイルの読み込みについて教えて

    また教えてください test13.txtの中身を1,2,3,4,5,6として、以下をコンパイルスルと、 printf("%d\n",a[0]);のときは 1 と結果がでますが printf("%d\n",a[3]);とすると -858993460などと、わからない数字がでます、どこがおかしのか初心者なのでさっぱりわかりません。 #include <stdio.h> int main(void) { int i; int a[6]; FILE *file; file = fopen("d:\\test\\test13.txt","r"); for(i=0;i<6;i++) fscanf(file,"%d",&a[i]); fclose(file); printf("%d\n",a[3]); return 0; }

  • テキストファイルから読み込ませたい

    このプログラムをテキストファイルから読み込ませたいのですが、 どう改良したらいいかわかりません。どなたかプログラムの追加を教えていたたけないでしょうか。 #include <stdio.h> int main() { int i,key,len,num ; char str[256],*ptr[128] ; num = 0 ; len = 0 ; ptr[0] = str ; do { key = getchar(); str[len] = (char)key ; if ( key == ' ' || key == '.' || key == ',' || key == '!' || key == '?' || key == '"' || key == 0x0a || key == 0x0d ){ str[len] = '\0' ; if ( str+len-ptr[num] ){ num ++ ; } ptr[num] = str+len+1 ; if( key=='.' || key== '!' || key=='?' || key=='"'){ str[++len]=(char)key; str[++len]='\0'; ptr[++num]=&str[len+1]; } } len ++ ; } while ( key != 0x0a && key != 0x0d && len < 255 ); str[255] = '\0' ; for (i=0 ;i<num ;i++){ printf("%d. %s\n",i+1,ptr[i]); } return i ; }

  • 配列について

    Visual c++なのですが #include<stdio.h> #include<stdlib.h> int main(){ FILE *fin,*fout; int HAP[135135][14];   long i,j; long x=135135,y=14; ・・・ のときは実行可能なのですが、 #include<stdio.h> #include<stdlib.h> int main(){ FILE *fin,*fout; int HAP[135135][14];   long i,j; long x=135135,y=14; ・・・ のときはビルトは可能できますが、デバックすると動作を停止してしまいます。なぜできないのかわからないで悩んでいます。是非教えてください。 ・・・の部分はほぼ同文です

  • 配列要素内の数値

    #include <stdio.h> int main(void) { int arr[1]={123456789}; int *x[1]; *x = arr; printf("%d ",*(x[0])); /* 123456789 と表示*/ return 0;} 実行すると123456789と表示されるまでは分かるのですが、*(x[0])の部分を別の書き方にして、arr[0]に入ってある「123456789」という数値の千の値である6という数値のみを取り出して、表示することは可能なのでしょうか?(6000と取り出したいのではなく、6として取り出したい) 次のように数値を文字列の一つ一つを扱うかのように、扱いたいのです。*(x[0])の部分の変更だけで6を取り出せるような方法はありますか? #include <stdio.h> int main(void) { char *arr[]={"pen"}; printf("%c\n",*(arr[0]+0)); printf("%c\n",*(arr[0]+1)); printf("%c\n",*(arr[0]+2)); return 0;}

  • テキストの読み込み

    数値が書き込まれている2つのテキストファイルを同時に読み込ませてループしていくのは どうしたら良いですか? x.txtが1行目を読み込んだら,y.txtも1行目を読み込むように行いたいです。

専門家に質問してみよう