• ベストアンサー

テキストファイルからの読み込みがうまくできません(>_<)

C言語初心者の学生です。 読んでいただきありがとうございます。 テキストファイルに数字を並べ、それを読み込んで char型の変数に入れ、さらにatofによってfloat型に変換し、計算に使っていくということがしたいのですが、 テキストファイルの書き方がおかしいのか、プログラムの書き方がおかしいのか、テキストファイルに書いたとおりの値とは異なるおかしな値が表示されます・・・ だいたいのプログラムの書き方は、 char型のa2、float型のa[n][n]、FILE *fpINを定義して if ( (fpIN = fopen("matrix.txt", "r" )) != NULL ){ if ( fgets(a2,sizeof(a2),fpIN) != NULL ){ } fclose( fpIN ); } for(i=0;i<n;i++){ for(j=0;j<n;j++){ a[i][j]=atof(a2); } } というようなものです。 テキストファイルは、数字をカンマで区切ったり、スペースで区切ったりと いろいろ試してみたのですが、やはり書き込んだ値とは異なるものが表示されます・・・ 最終的には、ひとつのテキストファイルに 複数の行列のための値を書き込んでおき、それを読み込んで計算させるということをしたいのです・・・ どなたか、正しく値が読み込まれない原因が分かりましたら、教えていただければと思います。 お手数をおかけしてすみませんが、よろしくお願いします。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★それではアドバイスします。 ・最初に a2[] 配列の容量(サイズ)が足りません。  テキストファイルでは 19 バイトほどあります。  n が 3 なので a2[3*3] はサイズが不足しています。  行列が 3x3 だけなら a2[ 32 ] あれば十分ですが 100x100 なども考えると容量が不足します。  そこで fgets() 関数ではなく fscanf() 関数を利用してみてはどうでしょうか。 ・下にそのサンプルを載せておきます。 サンプル: if ( (fp = fopen("matrix.txt","r")) != NULL ){  for ( j = 0 ; j < N ; j++ ){   for ( i = 0 ; i < N ; i++ ){    if ( fscanf(fp,"%lf,",&a[j][i]) != 1 ){     goto LoopExit;    }   }  } LoopExit:  fclose( fp ); } その他: ・上記のサンプルは読み込み部分です。  表示の部分はあっています。 ・a[][] の二次元配列は a[縦方向][横方向] という感じで代入しています。  参照の時もそうして下さい。 ・以上。

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec17.html
donntakosu
質問者

お礼

ご親切に ありがとうございます! たった今 きちんと読み込むことができました!! 本当にありがとうございます! とりあえず基礎が分かったところで、応用にむけて頑張ってみます。 さきほどもどこかで書いたかもしれませんが、 二つ分の行列の要素をあるひとつのファイルに与えておきそこから読み込みたいと思っています。 今教えていただいた基礎をもとに 考えてみようと思いますが、もしもまた埒があかないようでしたら 失礼するかもしれません(>_<) ひとまず、ありがとうございました!

その他の回答 (3)

回答No.3

> 1,2,3,4,5,6,7,8,9 > と 書きました。 ならば - 文字列として読み込み - ','を区切りに分割し - 分割されたそれぞれの文字列を数値に変換 しなければなりません。 # fgetsで一気に取り込むなんて誰に教わった!? # それができるのはバイナリファイルのみ。

donntakosu
質問者

お礼

fgetsによる取り込みがバイナリファイルのみというのは 今言われてみて納得しました!わたしは情報系を専攻しているわけでなく研究でプログラムを利用しているためC言語は 本当に基礎的なこと意外は独学で身につけました。そのため、誰に教わったということもなく、苦手な分野があり、特にファイルの入出力が今 苦手としています。 ファイルからの取り込みで、fgetsで読み込んでいるプログラムを目にしたので、fgetsは常に読みこみに使える(一行ずつ読み込む)ものだと思い込んでおりましたが、確かに あれはバイナリ形式でした(>_<) まだ 全てのコマンドを 把握しきれているわけではないので、奮闘しております。 アドバイスありがとうございました!

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★ソースが省略しすぎでないの? >どなたか、正しく値が読み込まれない原因が分かりましたら、教えていただければと思います。  ↑  質問の大体のプログラムの書き方だけでは原因が分かりませんが…。  特に fgets() 関数のブロック内が重要でしょうからそこは省略しない方が良いです。  どんな感じなのでしょうか? ・あと for 文で i, j を使っていますが、a[i][j]=atof(a2); だけではいつも同じ値が  a[i][j] に代入されると思います。fgets() 関数で a2[] 配列の数字列を読み込んで  いるようですがカンマか、スペースなどで区切られているのなら atof() で位置を変更  すべきです。つまり、  a2[] = "123,456,789";  の文字列がセットされているのならば  a[i][0] = atof( a2 + 0 );  a[i][1] = atof( a2 + 4 );  a[i][2] = atof( a2 + 8 );  という感じにします。  引数で与える位置がいつも同じなので a[i][j] にはいつも同じ値がセットされていませんか? >お手数をおかけしてすみませんが、よろしくお願いします。  ↑  main() のソースを補足に貼り付けて下さい。  あとテキストデータの内容は回答者 No.1 さんの補足にでも貼り付けておいて下さい。  分かりやすいように。 ・それでは。また。

donntakosu
質問者

補足

すみません、要点部分しか書いておらず、説明不足で失礼いたしました(>_<)作ろうとしているプログラムは長ったらしかったので、シンプルに 今のわたしが勘違いをしたままの知識でではありますが、テキストファイルから数値を読み込んでパネルに表示する というだけのものを書いてみました。それがこちらです。 #include<stdio.h> #include<stdlib.h> #define n 3 main(){ int i,j; char a2[n*n]; double a[n][n]; FILE *fp; fp = fopen("matrix.txt", "r" ); fgets(a2,sizeof(a2),fp); fclose(fp); for(i=0;i<n;i++){    for(j=0;j<n;j++){ a[i][j]=atof(a2); printf("%10.2f",a[i][j]);  } printf("\n"); } return 0; } テキストファイルは  1,2,3,4,5,6,7,8,9 EOF としました。なので、ご指摘のとおり、行列にはすべて1.0がはいってしまっているようです(>_<) ココを書いたあと、今ご指摘いただいたところを 確認してみます!

回答No.1

書き込まれたテキストファイルのサンプルを示してください。

donntakosu
質問者

補足

そうですね、すみません! 3×3の行列の要素を書きたいので 1,2,3,4,5,6,7,8,9 EOF と 書きました。説明不足ですみませんでした!

関連するQ&A

  • CSVファイルの読み込み

    以下のようなCSVファイルを読み込みたいと思っています。 0.575092,0.030525 0.565324,0.018315 0.555556,0.013431 0.553114,0.013431 0.54823,0.015873 0.538462,0.013431 0.531136,0.006105 0.52381,-0.003663 0.516484,-0.010989 0.501832,-0.015873 0.489622,-0.018315 0.477412,-0.020757 0.46276,-0.020757 ・ ・ ・ 50000*2のデータで、以下のようなプログラムを使用しました。 #include <stdio.h> #include <stdlib.h> #include <string.h> /* 確保するデータ保存領域の大きさ(N行×M列) */ #define N 50000 #define M 2 /* データの区切り文字 */ #define SEP_DATA ',' int csv_read(char filename[], double csv[N][M]) { /* ファイルオープン */ FILE *fp; if( (fp = fopen(filename, "r")) == NULL ) { printf(" file open error!!\n"); return -1; } /* 1行毎に読み出し */ char line[256], *ptr; int i, j, k; i=0; while (fgets(line, 256, fp) != NULL) { printf("*%s", line); ptr = line; j=0; do{ /* line[j]から次のタブ文字までを数値に変換 */ csv[i][j] = atof(ptr); /* 次のタブ文字の位置を探す */ ptr = strchr(ptr, SEP_DATA); /* タブ文字の次の文字を示す */ if (ptr!=NULL) { ptr++; } j++; }while(ptr!=NULL && j<M); i++; } /* ファイルクローズ */ fclose(fp); return 0; } int main(int argv, char *argc[]) { char filename[256]; if( argv > 1){ strcpy(filename, argc[1]); } else { printf("Please Input Filename:"); scanf("%s", filename); } /* データ保存用の領域を確保 */ double (*csvdata)[M]; csvdata = (double(*)[M])malloc(sizeof(csvdata) * N); if ( csvdata == NULL ){ return -1; } int i,j; /* 配列の初期化 */ for( i=0; i<N; i++) { for( j=0; j<M; j++) { csvdata[i][j] = 0.0; } } /* CSVデータの読み込み */ if( csv_read(filename, csvdata) < 0 ) { return -1; } /* 配列の出力 */ for( i=0; i<N; i++) { printf("%lf", csvdata[i][0]); for( j=1; j<M; j++) { printf("\t%lf", csvdata[i][j]); } printf("\n"); } free(csvdata); csvdata = NULL; return 0; } しかし、コンパイルは通るのですが実行時にエラーが出てしまいます。 データの大きさに問題があると思うのですが、原因がわかりません。おかしな所のご指摘を頂きたいです。よろしくお願いします。

  • ファイルの読み込み

    以下のデータが入ったファイルを読み込んで、出力するプログラムを 作成したのですが、旨くデータを出力できません。どなたか教えていただけないでしょうか?  E | 1 3 | 1 E | 2 | 1 2 E | 3 | 0 E | E | 0 #include<stdio.h> #include<string.h> #include<stdlib.h> #define NFA_STATE_MAX 128 typedef struct nlist{ int c; int to; int from; }nlist_t; main() { char line[255]; FILE *fp; int i,j; if((fp = fopen("data.txt", "r")) == NULL) { printf("Can't Open This File.?n"); exit(1); } char atranbysymbol[100]; char *tranofsymbol; int ntran = 0; int nstate=4, nsymbol=2; nlist_t nfa[NFA_STATE_MAX]; for(i=0; i<nstate; i++) { int ns = 0; fgets(line,255,fp); tranofsymbol = strtok(line,"|"); while(tranofsymbol != NULL) { atranbysymbol[ns++] = *tranofsymbol; tranofsymbol = strtok(NULL,"|"); } for(j=0; j<=nsymbol;j++) { char *sto; strcpy(line, &atranbysymbol[j]); sto = strtok(line," "); while(sto != NULL) { if(strcmp(sto, "E")!= 0) { nfa[ntran].to = atoi(sto); nfa[ntran].from = i; nfa[ntran++].c = j - 1; } sto = strtok(NULL, " "); } } } for(i=0; i<ntran; i++) { printf("From: %d ", nfa[i].from); printf("To: %d ", nfa[i].to); printf("on Symbol: %d ?n", nfa[i].c); } return 0; }

  • テキストファイルについて

    以前は、マップを作るときに下のようにしていたのですが char dungeon[5][5]={{0,0,0,1,1}, {1,1,0,1,1}, {1,0,0,0,1}, {1,1,0,1,1}, {1,1,0,0,0}}; for(i=0;i<5;i++){ for(j=0;j<5;j++){ else if(dungeon[i][j]==0)printf("+"); else printf("#"); } printf("\n"); } 最近、ファイルの入出力で読み込む事にチャレンジしています。 それで、メモ帳で書いたマップを使おうとしているのですが、 こんなのです。 1011111111111 1000000000001 1111111111101 1111100000001 1111100000001 1111100000001 1111100002001 1000000000001 1011111111111 fp = fopen("map.txt","r");の部分でテキストファイルを指定しますが、複数作った上のようなマップを切り替える時、どうすればいいんでしょうか? 質問が稚拙かもしれませんがよろしくお願いします。 #include <stdio.h> void map(void);//マップの表示関数の宣言 int main(){ map(); } void map(void));//マップの表示関数の定義 { FILE *fp; char str[1024];//これくらいでいいかな? //map.txtを読み込みモードで開く fp = fopen("map.txt","r"); //ファイルオープンに失敗したら if(fp==NULL){ //失敗を表示し終了 printf("ファイルのオープン失敗\n"); return -1; //exit;でもいいのかな? } //fgetsの戻り値がnullになるまで //strにファイルから内容を格納 while((fgets(str,256,fp))!=NULL){ //格納された文字を出力 printf("%s",str); } //ファイルを閉じる fclose(fp); }

  • バイナリデータをテキストファイルに出力したい

    以下のソースファイル(test.c) が、 バイナリデータをテキストファイルに するものらしいのですが、 ファイル名(例えば bi.dat)を指定する方法が わかりません。 C++は勉強し始めたばかりで 詳しくありません。 よろしくお願い致します #include <stdio.h> int main( int argc, char *argv[]) { FILE *fpIn; FILE *fpOut; short snData; if( argc < 2) { printf("ファイル名を入れてください。"); return -1; } fpIn = fopen( "argv[1]" , "rb"); if( fpIn == NULL) { printf("入力ファイル %s を開けませんでした。", argv[1]); return -2; } fpOut = fopen( "output.txt", "w"); if( fpOut == NULL) { printf("出力ファイル output.txt を開けませんでした。"); fclose(fpIn); return -3; } while( fread( &snData, sizeof(short), 1, fpIn) == 1) { fprintf( fpOut, "%d\n", snData); }; fclose(fpIn); fclose(fpOut); return 0; }

  • C言語を使って、ファイルの読み込みをして切り出して2次元配列に格納した

    C言語を使って、ファイルの読み込みをして切り出して2次元配列に格納したいのです。 1,2行目に配列の行の数と列の数が書かれ、3行目から改行とカンマ、スペースで区切られて配列が書かれているテキストを読み込んで2次元配列に格納する。 テキストの例) 4 3 1.1 1.2 1.3 1.4 1.5 2.1 2.2 2.3 2.4 2.5 3.1 3.2 3.3 4.4 3.5 というプログラムを書いています。色々と参考書やサイトを参考してとりあえずの形にはなったと思ったのですが、実行してもエラーが出ます。 どこまで動いているか調べたところ、一行ごとに読み出してそれを切り出して行くところでおかしな事をしてしまっているようですが、どう変えたらいいものか分かりません。 なので、その点のアドバイスと 大きさの分からないファイルから1,2行目を読み出すのはこれで変な動きをする恐れはないか の2点についてヒントでも構わないので、教えてください。 以下、書いたソースです(申し訳ないのですが、文字数の関係で一部省略しています。) #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[] ) { double ** mainhairetu; int size_x, size_y; /* size_x 行 size_y 列 */ int i,j,count=0,count2; int *cut,*temp2; double temp; char s2[] = " ,"; char gyou[10],*num; FILE *fil; while((fgets(gyou,10,fil)) !=NULL){ if(count == 0){ size_x=atoi(gyou); count++; }else if(count ==1){ size_y=atoi(gyou); count=count+1; }else{ break; } } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ここでmallocを使ってcutとmainhairetuの2つの配列を作っています。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ count=0; for (i = 0; i < size_y+2; i++) { mainhairetu[i][0] = atof( strtok( fgets(cut,50,fil),s2 ) ); for (j = 1; j < size_x; j++){ if(count <=1){ count++; break; }else{ mainhairetu[i][j] = atof( strtok( NULL,s2 ) ); } } } for(i=0;i<size_y;i++){ for(j=0;j<size_y;j++){ printf("%f",mainhairetu[i][j]); } printf("\n"); } return(0); }

  • データの読み込みがうまくいかなくて、困っています

    プログラミング初心者です。 誤差逆伝播学習のプログラムを行っています。 C言語で、データの読み込み部分がうまくいかなくて、困っています。 borland , BCC Developerなどを用いてやっております。 やりたいことは、テキストファイルから数字を読み込み、それを行列に格納してデータとして送るということです。 その際に、テキストファイルで行と列で表示されたものを送ろうと考えています。30×30の、1と0で表示された絵と教師信号を読み取っています。 列だけの読み込みは正常に動いたのですが、行と列で表示されたものの読み込みができません。char型で変数を宣言しているので、数字として読み込めていないとか、そういったことがあるのでしょうか。o1[][],t[][]の部分に正しく値が送れるようにしたいです。 非常にわかりにくくて申し訳ないのですが、お分かりになる方がいたら、どこをどう変えれば良いか、教えて頂きたいです。 「間違っている列と行の読み込み」 //データをファイルから読み込む// void read_file(name) char *name; { int i,j,k; //ループカウンター// FILE *fp; //ファイルポインタ// char buff[MCHS]; //buffの最大文字数1024 //ファイルオープン// if((fp=fopen(name,"r"))==NULL){ fprintf(stderr,"%s:File open error !!\n",name); exit(-1); } //学習データを読み込む// fscanf(fp, "%d",&learning_pattern_no); //学習パターンの数読み込み fscanf(fp,"%d",&test_pattern_no); //テストパターンの数読み込み printf("学習パターンの数:%d\n",learning_pattern_no); //学習パターンの数表示 printf("テストパターンの数:%d\n",test_pattern_no); //テストパターンの数表示 i=0;j=0; while( fgets( buff, MCHS, fp ) != NULL ){ if(j<=learning_pattern_no+test_pattern_no-1){ for( k=0; k<MCHS; k++ ){ o1[j][i+k]=buff[k]; //o1[j][i+k]にbuff[k]を入れる printf("%c",buff[k]); //printfで確認 if( buff[k] =='\n'){ i=i+k; if (i==InputUnitNo){ i=0; j++; printf("%d",j); }//if(i==InputUnitNo)終了 break; }//if(buff[k])終了 }//for終了 }//if(j<=learn+test)終了 else{ //ここから教師信号の読み取り for( k=0; k<MCHS; k++ ){ t[i][k]=buff[k]; printf("%c",buff[k]); //教師信号の確認 if( buff[k] == '\n' ){ i++; break; }//if(buff[k])終了 }//for終了 }//else終了 }//while終了 } 「正常に動いた列だけの読み込み」 //データをファイルから読み込む// void read_file(name) char *name; { int i,j; //ループカウンター// FILE *fp; //ファイルポインタ// //ファイルオープン// if((fp=fopen(name,"r"))==NULL){ fprintf(stderr,"%s:File open error !!\n",name); exit(-1); } //学習データを読み込む// fscanf(fp, "%d",&learning_pattern_no); printf("学習データの数:%d\n",learning_pattern_no); for(i=0;i<learning_pattern_no; i++){ for(j=0;j<InputUnitNo; j++) fscanf(fp,"%lf",&o1[i][j]); for(j=0;j<OutputUnitNo; j++) fscanf(fp,"%lf",&t[i][j]); //教師信号 } //テストデータを読み込む// fscanf(fp,"%d",&test_pattern_no); printf("テストデータの数:%d\n",test_pattern_no); for(i=learning_pattern_no;i<learning_pattern_no+test_pattern_no;i++) for(j=0;j<InputUnitNo;j++) fscanf(fp,"%lf",&o1[i][j]); fclose(fp); }

  • テキストの読み込みとmalloc()についてです

    こんにちは。 二つのベクトルの次元と要素をテキストファイルから読み取ってそのベクトルの和を出したいのですがうまくいきません。 #include <stdio.h> #include <stdlib.h> double vector_sum(double *x, double *y, int n){ int i; double z[256]={0}; for(i=0;i<n;i++){ z[i] = x[i] + y[i] ; } return *z; } //ベクトル和を出す関数(のつもり)// int main(void){ int i,j,e; double *a,*b,c[256][256]; //a,bはベクトル// FILE *fp; char fname[64]; char str[256]; double z[256]; printf("二つのベクトルが書き込まれているファイル名を入力してください."); scanf("%s",fname); fp = fopen(fname,"r"); if(fp==NULL){ printf("そのようなファイルを見つけることができません。"); } while (fgets(str, 256, fp) >= 0) { i++; fgets(str, 256, fp); printf("%s",str); //テキストの読み取り// if(fgets(str,256,fp)==NULL) break; //読み取り終了時の動作// sscanf(str,"%lf", &c[i]);//c[i][0]は要素数、c[i][1以上]はベクトルの中身を指すことにする。// printf("%lf%lf%lf%lf%lf%lf%lf%lf\n",c[0][0],c[0][1],c[1][2]); if(sscanf(str,"%lf", &c[i])<1){ printf("Format error"); } } if(c[0][0]!=c[1][0]){ printf("要素数が違います。"); } a = malloc(sizeof(double) * c[0][0]); b = malloc(sizeof(double) * c[1][0]); if(a==NULL||b==NULL){ printf("記憶領域の確保に失敗しました。"); } e = c[0][0]; //要素数// for(i=0;i<=e-1;i++){ a[i]=c[0][i+1]; //ベクトルの中身のみをa,bに代入する。// b[i]=c[1][i+i]; } *z= vector_sum(a,b,e); printf("ベクトル和は{"); for(i=0;i<=e-1;i++){ printf("%lf,",z[i]); } printf("}です。"); return 0; } テキストファイルは下のものを使いました。(ファイル名はvector.txt) element: 7 { 4, 4 ,4 ,4 ,4 ,4 ,4 } element: 7 { 8, 8, 8, 8, 8, 8, 8 } 結果は 「二つのベクトル名が書き込まれているファイルを入力してください。(vector.txtを入力) element: 7 { 8, 8, 8, 8, 8, 8, 8 } 要素数が違います。記憶領域の確保に失敗しました。ベクトル和は{}です。」 と表示されてしまい、困っています。 初歩的なミスかもしれず恐縮ですがよろしければ回答お願いします。

  • ファイルの読み込みが上手くいかず困っています。

    #include<stdio.h> #include<math.h> #include<time.h> #define i0 2 /*流体部分の最小格子番号*/ #define j0 2 #define k0 2 #define in 41 /*流体部分の最大格子番号*/ #define jn 41 #define kn 41 #define imax 44 /*境界を含めた格子の数*/ #define jmax 44 #define kmax 44 #define N 100000 void sabun(void); int i,j,k,n,pgosa,vgosa,x,y,z; double u[imax][jmax][kmax], v[imax][jmax][kmax], w[imax][jmax][kmax], p[imax][jmax][kmax]; double u2[imax][jmax][kmax], v2[imax][jmax][kmax], w2[imax][jmax][kmax], p2[imax][jmax][kmax]; double Vn=-1.0, a=10.0; /*初期値*/ double dt=0.001, dx=0.025, dy=0.025, dz=0.025, rei=250000.0; double dx2, dy2, dz2, po; main() { FILE *fpin,*fpout; clock_t start,end; start = clock(); /*時間計測開始*/ fpin=fopen("H-clock.dat", "r"); /*入力ファイル*/ if(fpin==NULL) { printf("入力ファイルのオープンに失敗しました"); return 0; } x=i-1; y=j-1; z=k-1; for(i=i0;i<=in+1;i++){ for(j=j0;j<jn+1;j++){ for(k=k0;k<kn+1;k++){ fscanf(fpin,"%d %d %d %.6lf %.6lf %.6lf %.6lf\n",&x,&y,&z,&u[i][j][k],&v[i][j][k],&w[i][j][k],&p[i][j][k]); printf("%d %d %d %.6lf %.6lf %.6lf %.6lf\n",x,y,z,u[i][j][k],v[i][j][k],w[i][j][k],p[i][j][k]); } } } 読み込みの部分のある部分まで載せているのですが読み込みの部分に問題が あると思うのですがどうすれば読み込んでくれるのか分かりません。ですので解決法を教えていただけると助かります、よろしくお願いします。

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

    また教えてください 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; }

  • ファイル操作で全角空白を消す

    こんばんは(^o^) C言語のファイル操作について聞きたいのですが、 半角スペースを消去するところまではわかったんですけど、 全角スペースも消去するプログラムがわかりません(>_<) お手数ですが、ご指導のほうよろしくお願いしますm(_ _)m 問題 テキストファイルから空白を削除して、画面に表示するプログラムを 作成しなさい。 自分のプログラム #include <stdio.h> #include <stdlib.h> #define SIZE 15 int main(void) { char c; char finName[SIZE],foutName[SIZE]; FILE *fpin,*fpout; printf("入力ファイル名>>>"); scanf("%s",finName); if((fpin=fopen(finName,"r"))==NULL) { printf("ファイルが見つかりません。---%s\n",finName); exit(EXIT_FAILURE); } printf("出力ファイル名>>>"); scanf("%s",foutName); if((fpout=fopen(foutName,"w"))==NULL) { fclose(fpin); printf("ファイルを作成できません。---%s\n",foutName); exit(EXIT_FAILURE); } while(1) { c=fgetc(fpin); if(feof(fpin)) { break; } if(c!=' ') { fputc(c,fpout); } } fclose(fpin); fclose(fpout); return EXIT_SUCCESS; }