fscanfを使った入力方法.ミスはどこ?

このQ&Aのポイント
  • インプットファイルからデータを入力したいのですが、うまくいきません。
  • 過去に同様の方法で入力できたのに、どこがおかしいのか分かりません。
  • ミスを教えていただけますか?
回答を見る
  • ベストアンサー

fscanfを使った入力方法.ミスはどこ?

簡単な内容で申し訳ありませんが,お願いします. インプットファイルからデータを入力したいのですが, うまくいきません.以前は同様の書き方で入力できたので, どこがおかしいのか分かりません.慣れた方にはすぐに 見つけられるのでしょうが,どこかに違いがあるのか 探せず困っています.ミスを教えていただけませんか? -------------------- double dlt1; dlt2以下も同様にdoubleで定義. FILE *input; input=fopen("input.txt","r"); fscanf(input,"%f",&dlt1); fscanf(input,"%f",&dlt2); fscanf(input,"%f",&dlt3); fscanf(input,"%f",&dlt4);  以下,同じように20個ほどの  入力値が続きます. fclose(input);  以下,計算が続きます. -------------------- input.txtの中身は以下のようになっています. ------ 1. 0.136 10. 2.8e-10 以下同様の数字が続く. ------

  • yodel
  • お礼率75% (6/8)

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

  • ベストアンサー
  • tea_sheep
  • ベストアンサー率53% (8/15)
回答No.1

double型変数へ入力は %f ではなく %lf です。

yodel
質問者

お礼

ありがとうございました.できました.

関連するQ&A

  • fscanf()

    fcanf()がうまくいきません。 画面には、42640888のような数値が表示されます。 どこが間違ってるか教えてください。 (test.txtに23と書いてあるとします。) #include<stdio.h> int main(void) {    FILE *fp;    FILE *fp1;    char str[10];    int a;    fp=fopen("test.txt","r")    fp1=fopen("a.txt","w")    while(!feof(fp)){       fgets(str,8,fp);       fputs(str,fp1);    }    fscanf(fp,"%d",&a);    printf("%d",a);   fclose(fp);   fclose(fp1);   return 0; }

  • fscanfについて

    教えてgooを参考にしましたが、fscanfを使ってテキストファイルの任意の行のデータを読み込みたいのですがうまくいきません。 テキストファイルは 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 0 1 0 1 1 といった感じの2進数で3行以上あります。 下に自分が作ったソースがあります。 どこがいけないのか、どういった手法があるのかを詳しく教えていただけたら幸いです。よろしくお願いします。 int gene[10]; FILE* f=fopen("Gene.txt","r"); while(fscanf(f,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &gene[0],&gene[1],&gene[2],&gene3],&gene     [4],&gene[5],&gene[6],&gene[7],&gene       [8],&gene[9])!=EOF) n++; fclose(f);

  • 大量の入力ファイルを扱うとき、for文などで簡略化できる?

    例えば、"input_1.dat", "input_2.dat" ... "input_9.dat","input_a.dat" ... "input_z.dat"のように、 ファイル名が一定のフォーマットに従った 入力ファイル群があるとします。 (ファイル内の数値の配置フォーマットも一緒) これらのファイルの中身を fopen→fscanf→fcloseを使って読みこむとき、 FILE *fin1, *fin2; fin1 = fopen("input_1.dat","r"); fin2 = fopen("input_2.dat","r"); ... のようにファイル名をひとつひとつ読みこまず、 for, whileなどを用いて簡単に書けないでしょうか?

  • fscanf()【C言語】

    テキストファイルをうまく読み込んでくれません。 どうかご教示お願いいたします。 環境 Windows7 Borland C++ 5.5.1 for Win32 status.txtの内容 1.50,40.0 1.55,45.0 1.60,50.0 1.65,55.0 1.70,60.0 1.75,65.0 1.80,70.0 1.85,75.0 1.90,80.0 プログラムの内容 #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){ FILE *filepointer; double s[10],w[10]; int i=0,ret; if((filepointer=fopen("status.txt","rt"))==NULL){ printf("file open error!!\n"); exit(1); } printf("%X\n",filepointer); while((ret=fscanf(filepointer,"%f,%f",&s[i],&w[i]))==2){ i++; printf("%d %f %f\n",ret,s[i],w[i]); } fclose(filepointer); return 0; } 出力結果 40E714 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 0.000000 0.000000 2 5.121811144940079976000000000000000000000e+303 0.000000 2 0.000000 0.000000 2 0.000000 0.000000

  • fscanf関数について

    -------------------------------------------------- #include<stdio.h> #include<stdlib.h> int main() { FILE*fp; int ch,dt; char ss[80]; if((fp=fopen("bbb.txt","w"))==NULL){ printf("出力ファイルをオープンできません.\n"); exit(1); } fprintf(fp,"%c",'A'); fprintf(fp,"%s\n","abcdeABCDE"); fprintf(fp,"%d\n",1234); fclose(fp); if((fp=fopen("bbb.txt","r"))==NULL){ printf("入力ファイルをオープンできません.\n"); exit(1); } ch=fgetc(fp); printf("ch=%c\n",ch); fscanf(fp,"%s",ss); printf("ss=%s\n",ss); fscanf(fp,"%d",&dt); printf("dt=%d\n",dt); fclose(fp); return 0; } -------------------------------------------------- 以上のプログラムで、プログラムの通り「bbb.txt」は、 AabcdeABCDE 1234 となっております。 そこで疑問なのですが、「ch=fgetc(fp);」は1文字読み込みなので、'A'だけと分かるのですが、「fscanf(fp,"%s",ss);」はfpからの読み込みで何故、 AabcdeABCDE 1234 の全部を読み込まず、'A'を抜かした、「abcdeABCDE」だけを読み込んでくれるのか? 後、「fscanf(fp,"%d",&dt);」は何故「AabcdeABCDE」を抜かした、「1234」だけを読み込んでくれるのかが分かりません。 「fscanf(fp,"%d",&dt);」については数値だけを読み込んでくれるのかと思い、 ch=fgetc(fp); printf("ch=%c\n",ch); fscanf(fp,"%s",ss); printf("ss=%s\n",ss); の部分を無くせば、「1234」だけを読み込んでくれるのかと思ったのですが、数値は正しく表示されません。 以上教えていただければ嬉しいです。

  • fscanfについて

    ファイルの中身が例えば 600 0.6 3.5 となっているとき, fscanfで読み込むと改行\nを読み込んでくれる場合と読み込まない場合がありませんか? また,これだったら,経験から fscanf(fp,"%d",&a); fscanf(fp,"%f",&b); fscanf(fp,"%c",&c); // \nの読み飛ばし fscanf(fp,"%f",&d); fscanf(fp,"%c",&e); // \nの読み飛ばし でやるとできそうですが,fscanf(fp,"%d",&a);のあとの\nの読み飛ばしがいらないのは何故ですか?

  • ポインタ配列をfscanfで読み込むと・・・

    現在BorlandのC言語で人の名前をセーブする処理を 作っています。そこで以下の様に書いたのですが、 コンパイラでは通るのに、実行してセーブをして ロードをすると必ず強制終了させられてしまいます。 これは一体何がいけなかったのでしょうか? また、どのように書いたらキチンと動作するのでしょう? #include <stdio.h> char *name[10]; void save(void){ FILE *file; file = fopen("name.txt", "w+"); fprintf(file,"%s %s %s ", name[1], name[2], name[3]); fclose(file); } void load(void){ FILE *file; file = fopen("name.txt", "r+"); fscanf(file,"%s %s %s ", &name[1], &name[2], &name[3]); fclose(file); } int main( void ){ name[1] = "いち"; name[2] = "に"; name[3] = "さん"; while ( 1 ){ int i; printf("name[1]:%s name[2]:%s name[3]:%s \n", name[1], name[2], name[3]); puts("1:セーブ 2:ロード"); scanf("%d",&i); if ( i == 1 ) save(); else load(); } return 0; }

  • fscanf

    fscanfを使って、ファイル(普通の英文が入っています)から一単語ずつ読み込んでいきたいと思っているのですが、どうすれば良いのかわかりません。 int main(int argc,char *argv[]){ FILE *fp; char *word; fp = fopen(argv[1], "r"); if(fp == NULL){ printf("error: not open file.\n"); return(0) ;} while( ){ fscanf(fp,"%[a-zA-Z]",word); printf("%s\n", word); fflush(stdout); } fclose(fp); return 0; } とりあえず上の様なプログラムで、一単語ずつ順番に単語を出力できるようにしたいと思っているのですが。 いろいろ変なところなど在ると思いますが、whileの条件など、どうすればよいか教えてください。

  • fscanf ファイルから数を読み込む。

    ファイルから数を読み込むと 4201696 4201696 4201696 と、sample.txtにない数が表示されます。 sample.txtの中身は、2から6の数です。 sample.txtの中身は画像に添付しました。 以下は実行したプログラムです。 #include<stdio.h> #include <assert.h> int main(void){ FILE *fp; int a,b,i; if((fp=fopen("sample.txt","a"))==NULL){ printf("fileopen error\n"); } printf("整数を入力してください。"); scanf("%d",&a); fprintf(fp,"%3d\n",a); printf("整数を入力してください。"); scanf("%d",&a); fprintf(fp,"%3d\n",a); i=0; while(i<3){ fscanf(fp, "%d",&b); assert(b>2); printf("%3d\n",b); i++; } return(0);} 2から6の間の数が表示されるよう、指摘をおねがいします。

  • fscanfで格納された変数がおかしいです。

    fscanfで格納された変数がおかしいです。 ダブルポインタで定義した変数にfscanfでファイルから文字列データを読み込んでいるのですが 表示がおかしな事になっています。 読み込んだファイルの内容は、 aiueo kakikueko sasisuseso tatituteto です。 表示された結果が kakikueko sasisuseso tatituteto kakisasitatituteto sasitatituteto tatituteto 自分では解決しずらいのでここで質問をさせて頂くことになりました。 C/C++で記述してあるのですが、以下にソースを載せておきますのでご指摘ください。 /* double pointa */ #include <stdio.h> #include <stdlib.h> #define MAXSIZE 256 char** size; // TEST void test(void) { for(int l = 0; l < 3; l++) { printf("\n%s", &size[l]); } } int main() { FILE* fp; int c = -1; char moji[MAXSIZE]; if((fp = fopen("test.txt","rb")) == NULL) { printf("error"); exit(1); } while(fscanf(fp,"%s",moji) != EOF) c++; size = (char**)malloc(sizeof(char) * MAXSIZE * c); // 初めに戻す fseek(fp, 0, SEEK_SET); // 最初の文だけ取り出す fscanf(fp,"%s",moji); // 一文を格納する for(int l = 0; fscanf(fp, "%s", &size[l]) != EOF; l++) { printf("\n%s", &size[l]); } printf("\n"); test(); fclose(fp); getchar(); free(size); return 0; } test関数内で表示するとおかしな結果がでるのですが何故かわかりません。 よろしくお願いします。

専門家に質問してみよう