• ベストアンサー

書き込んだファイルに改行が入ってしまう

最後のfp3で書き込んだファイルのsample.txtが Problem Solving and Program Design in CC : A Reference ManualC Primer PlusC How to ProgramC Programming for Engineering and Computer ScienceIntroduction to CProgramming Embedded Systems in C and C++Absolute Beginner's Guide to CNumerical Recipes in C : The Art of Scientific ComputingThe C Programming Language このように途中で改行されてしまいます。 これはBorlandの特徴で仕方がないことなんでしょうか。。 それともプログラムが間違ってるのでしょうか。 ご教授よろしくおねがいします。 if((fp3 = fopen("sample.txt","w")) == NULL){ printf("can't open"); return(-1);//強制終了 } else{//タイトルだけをサンプルに書き出す for(i=0;i<M;i++){ fprintf(fp3,"%s",book[i].title); } } fclose(fp3); fclose(fp2); fclose(fp1); return(0);//正常終了 }

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

  • ベストアンサー
回答No.3

視点を変えると、結果を確認するために使った、エディタが気を利かせて自動改行しているという可能性もありかと思います。

newcolleger
質問者

お礼

Borlandそんな気を利かせてくれなくてもいいのに^^; ありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

book[i].titleがそうなってるんじゃないのかなぁ

newcolleger
質問者

お礼

確かにbook[i].titleが読み込んでる可能性もありますね。 ただ、linuxでコンパイラした時に改行されてなかったのでおそらく自動改行みたいですね。

  • MasamiH
  • ベストアンサー率21% (13/61)
回答No.1

fprintfで改行出力していないからバッファがいっぱいになって自動改行してるのでは? "%s\n" ではだめ?

newcolleger
質問者

お礼

勝手に自動改行してたみたいです。 ありがとうございました。

関連するQ&A

  • C言語のファイル入出力について

    for文の中でファイルの入出力をファイル名を変えながら行うことはできますか?作成したいプログラムは以下の通りになっています。 よろしくお願いします。 #include<stdio.h> main() { int i; FILE *fp; for(i=0;i<10;i++) {  fp=fopen("ココにiの値を入れたい.txt","w");  fprintf(fp,"%d\n",i);  fclose(fp); } return(0); }

  • セグメンテーション違反

    環境はLinux・C言語です。 #include<stdio.h> #include<string.h> struct book{ char author[256]; char title[256]; char publisher[256]; int year; }; int main(void); int main(void) { FILE *fp1,*fp2; struct book data[256]={0},dummy={0}; char author[256]; char title[256]; char publisher[256]; int year; int i=0,j=0; fp1=fopen("biblio.txt","r"); while(fscanf(fp1,"%s,%s,%s,%d\n",&author[0],&title[0],&publisher[0],&year)!=EOF){ strcpy(&data[i].author[0],author); strcpy(&data[i].title[0],title); strcpy(&data[i].publisher[0],publisher); data[i].year=year; i++; } j=i; fclose(fp1); while(1){ for(i=0;i<256;i++){ if(data[i].year > data[i+1].year){ dummy=data[i]; data[i]=data[i+1]; data[i+1]=dummy; break; } } if(i==256) break; } fp2=fopen("biblio2.txt","w"); for(i=0;i<j;i++){ fwrite(&data[i],sizeof(struct book),1,fp2); } fclose(fp2); return(0); } 以上のソースで、セグメンテーションエラーが出ます。 問題は while(fscanf(fp1,"%s,%s,%s,%d\n",&author[0],&title[0],&publisher[0],&year)!=EOF){ の部分だとは思うのですが、どう改善すればいいのかわかりません。 どなたかわかる方お願い致します。 ちなみに、biblio.txtの内容は B.W.Kernighan & D.M.Ritchie,The C Programming Language,Prentice Hall,1988 H.M.Deitel & P.J.Deitel,C How to Program,Prentice Hall,2001 J.R.Hanly & E.B.Koffman,Problem Solving and Program Design in C,Addison-Wesley,2002 D.M.Etter,Introduction to C,Prentice Hall,1999 H.H.Tan & T.B.D'Orazio,C Programming for Engineering and Computer Science,McGraw-Hill,2000 です。

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

    今、学校の課題でC言語を使ってプログラムを作っています。 20000個のデータを読み込んで、200個ずつに区切り、別々のテキストファイルで出力するというものです。 最初につくったのは、以下の通りです。 *********************************************** FILE *fp; { int b,i=0; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; fp = fopen("D1.txt","w"); for(i=0;i<=199;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); fp = fopen("D2.txt","w"); for(i=200;i<=399;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); ・・・ ***************************************** これだと20000まで繰り返し記述しなければならずかなり困難だと思いました。そこで、ループを作ろうとしたのですが、テキストファイルをループを使って複数作成する方法がわかりません。 以下のようなプログラムを作ったのですが、テキストファイルが一つしか作られませんでした。 どのように記述すればよいのでしょうか? **************************************** FILE *fp; { int a,i=0; int b=1; int c=199; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; start: fp = fopen("D[1+b].txt","w"); for(i=a;i<=c;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); if(i > c) c = c+200; a = a+200; b++; goto start; fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); fclose(fp); } } ****************************************** よろしくお願い致します。

  • ファイル入出力について教えて下さい。

    ご覧いただきありがとうございます。 数値を入力して、数値を出力する方法を教えて頂きたいです。 ・   ・   ・ fp = fopen( "a.txt", "a" ); for( i = 16383; i >= 0; i-- ) { fprintf( fp, "%d", i ); } fclose( fp ); ・   ・   ・ data = (int *)malloc(32768); fp = fopen( "a.txt", "r" ); for( i = 0, i <= 16383; i++ ) { fscanf( fp, "%d", data+i ); } fclose( fp ); ・   ・ ・ 以上の記述で、入力はうまくいくのですが、出力の際に数値でなくなってしまいます。どうしてでしょうか? ご存じの方がおりましたら、ご回答よろしくお願いいたします。

  • 変数からテキストファイルを保存

    サイトのソースを自動で取得するプログラムを考えいます。 その際にどこのサイトから取得したソースなのかをファイル名で整理したいと考えていますが、変数から自動的にテキストファイルを作ることができません。 どなたかお力をお貸し頂ければ幸いです。 それでは宜しくお願いいたします。 cate.txt======= shopping auction sports ============= <?PHP $Data = file("cate.txt"); for($c=0; $c<sizeof($Data); $c++){ //ここがうまく動いてくれません。。。 $filename == "{$Data[$c]}"."."."txt"; for($i=0; $i<1; $i++){ $url = "http://{$Data[$c]}.yahoo.co.jp/page={$i}"; $lines = file($url); $fp = fopen("data.txt","a"); foreach($lines as $newdata){ fwrite($fp, $newdata); } fclose($fp); } } ?>

    • ベストアンサー
    • PHP
  • ファイル出力で改行を入れたい!

    data.txtにファイル出力を行うのですが、gets(c)で入力した一語一語に改行を入れてdata.txtに出力したいのですがどうすればよいでしょうか。 返答のほどよろしくお願いいたします。 include<stdio.h> #define SIZE 20 void main(void) { char c[SIZE], *p; FILE *fp; fp = fopen("data.txt","w+"); p = c; while(gets(c) != NULL){ fputs(p,fp); } fclose(fp); printf("data.txtへ出力しました\n"); }

  • csvファイルを読み込んで二次元配列に格納したい

    200×250のある数字と文字の入力されたcsvファイル(またはtxtファイル)を読み込んで2次元配列に格納したいのです。 色々調べるとカンマの処理が必要ということがわかりましたが、どのようにソースを書けばよいかわかりません。使用言語はC言語です。 また、実際にcsvファイルを読み込むようにプログラムを書いてみましたが、すべて-858993460となって表示されます。 プログラミング初心者で勉強中なため困っています。 回答よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define row 200 #define column 250 int main() { int i, j; int data[row][column]; FILE *fp; fp = fopen("sample.csv", "r"); if (fp == NULL){ printf("ファイルがありません\n"); return 1; } for (i = 0; i < row; i++){ for (j = 0; j < column; j++){ fscanf(fp, "%lf", &data[i][j]); } } for (i = 0; i<row; i++){ for (j = 0; j < column; j++){ printf("%3d ", data[i][j]); } printf("\n"); } fclose(fp); return 0; }

  • Visual C++ 2005のデバッグエラーについて(コマンドライン

    コマンドラインを利用してファイルを読み込む類のプログラムを作っているのですが、コンパイルしてデバッグなしで開始をすると、エラーが出てしまいます。 調べようとしても原因がわからず困っています。 回答よろしくお願いします。 サンプルプログラム↓ コマンドラインでテキスト形式のファイルを読み込み、特定の部分を表示させたあとに、コマンドラインで指定したファイルに行を逆順にして書き込む・・・といった内容です。 こちらも途中までLinuxで作成、途中からVisual2005で編集・・・といった感じのプログラムです。 #include<stdio.h> #include<stdlib.h> #define LINE 1000 int main(void) { FILE *fp_in,*fp_out; char line[10][LINE]; char rv[10][LINE]; int i,j,k; fp_in=fopen("test.txt","r"); if(fp_in==NULL){ printf("File not found.\n"); exit(1); } while(fgets(line[i],LINE,fp_in)!=NULL){ printf("%d\n",i); i++; } i=1; j=0; while(i<3){ if(i==1){ for(j=0; j<=6; j++){ printf("%c",line[i][j]); } } if(i==2){ for(j=11; j<=15; j++){ printf("%c",line[i][j]); } } i++;} fclose(fp_in); fp_in=fopen("test.txt","r"); if(fp_in==NULL){ printf("File not found.\n"); exit(1); } fp_out=fopen("repurica.txt","w"); if(fp_out==NULL){ fprintf(stdout,"Can not open file.\n"); exit(1); } i=0; k=0; while(line[i]!='\0'){ i++; } while(i<4 ){ rv[k++][LINE]=line[--i][LINE]; } rv[j][LINE]='\0'; printf("%s\n",rv); fclose(fp_in); fclose(fp_out); return 0; }

  • ファイルに書き込む時の負荷について

    PHPバージョン5.2.4を使っています。 次のような // ------------------------------------ $fp = fopen("data.txt", "w"); $buf = ""; for ($i = 1; $i <= 3; $i++) { $buf .= "aaa$i\n"; } fwrite($fp, $buf); fclose($fp); // ------------------------------------ という変数にいったん保存してから書き込む場合と // ------------------------------------ $fp = fopen("data.txt", "w"); for ($i = 1; $i <= 3; $i++) { $buf = "aaa$i\n"; fwrite($fp, $buf); } fclose($fp); // ------------------------------------ というその都度ファイルに書き込む場合とでは どちらが良い悪いというのはあるのでしょうか? たとえばこちらのやり方は負荷がかかるなど ループが多くなっていった場合に違いがでてくるのでしょうか?

    • ベストアンサー
    • PHP
  • テキストファイルの同期

    はじめまして、超初心者プログラマのmoominといいます。 ファイルの同期プログラムに関して質問があるのですが、 あるテキストファイルを、他のディレクトリのテキストファイルとを 常に同期をするプログラムを作成しています。 これが作成したソースです。 ------------------------- #include "stdafx.h" #include <stdio.h> #include <windows.h> int _tmain(int argc, char *argv[]) { FILE *fp,*copy; int buffer; fp=fopen("○○○/×××.txt","rb"); copy=fopen("aaa/fff.txt","wb"); for(int i=1;i>0;i++){ fread(&buffer,sizeof(buffer),1,fp); fwrite(&buffer,sizeof(buffer),1,copy); if(feof(fp)){ fclose(fp); fclose(copy); } } return 0; } VC2008を利用して作成していますが、 一度きりの同期なら可能なのですが、 常に同期するというプログラムがわかりません。 どう変えればよいでしょうか?

専門家に質問してみよう