• ベストアンサー

行ごとにファイル結合

下記プログラムは、input1.txtの内容 0 1 2 3 4 5 6 7 8 をファイル入力して、行番号とファイルの内容を表示できるように作成したものです。 このプログラムにinput2.txt 9 10 11 12 13 14 とinput3.txt 15 16 17 をファイル入力し、行ごとに結合して 0 0 1 2 9 10 15 1 3 4 5 11 12 16 2 6 7 8 13 14 17 と表示できるようにしたいのですが、どのようにすればよいのでしょうか。ご存知の方、お手数ですが教えてください。よろしくお願いします。 #include <stdio.h> main(){ int i,j=0,N=0,n,a[100],m=0; FILE *fpi; if((fpi=fopen("input1.txt","r"))==NULL){ fprintf(stderr,"ファイルを開けません。\n"); exit(1); } while(fscanf(fpi,"%d",&a[N])!=EOF && N<100){ N++; } n=N/3; printf("%d",m); for(i=0;i<N;i++){ printf(" %2d",a[i]); j++; if(j==n && m<n-1){ printf("\n"); m++; printf("%d",m); j=0; } } fclose(fpi); }

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

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

全然違うかも… ---------------------------------------------------------- #include <stdio.h> #include <string.h> #include <stdlib.h> void main(void){ int n=0,i; char filename[16]; char buff[3][8]; char *nl; FILE *fp[3]; for(i=0;i<3;i++){ sprintf(filename,"input%d.txt",1+i); if(NULL==(fp[i]=fopen(filename,"r"))){ fprintf(stderr,"ファイルを開けません。\n"); exit(1); } } while(!feof(fp[0])){ for(i=0;i<3;i++){ if(NULL==fgets(buff[i],8,fp[i]))goto end; if(NULL!=(nl=strchr(buff[i],'\n'))) *nl='\0'; } printf("%d %s %s %s\n",n++,buff[0],buff[1],buff[2]); } end: fcloseall(); }

eliteyoshi
質問者

お礼

ご回答いただいたプログラムは非常に参考になりました。 おかげさまでなんとか理解することができました。 ありがとうございました。

その他の回答 (1)

回答No.1

入力ファイルのデータチェックをする必要がないのであれば、また、1行あたりのデータの数も固定であれば (主要部分のみ) int a, b, c; int d, e; int f; int count = 0; FILE *fp1 = fopen("input1.txt", "r"); FILE *fp2 = fopen("input2.txt", "r"); FILE *fp3 = fopen("input3.txt", "r"); while(fscanf(fp1, "%d %d %d", &a, &b, &c) == 3) { fscanf(fp2, "%d %d", &d, &e); fscanf(fp3, "%d", &f); fprntf("%d %d %d %d %d %d %d\n", count++, a, b, c, d, e, f); } こんなところです。

eliteyoshi
質問者

お礼

このようなやり方があるんですね。 僕でも十分に理解できました。 ありがとうございました。

関連するQ&A