c·c++/c 프로그래밍

공백이 포함된 문자열을 묶음으로 읽기

바로이순간 2012. 5. 27. 14:57

#include <stdio.h>

int main() {

    FILE *fout, *fin;

    char name[20]="ABC DEF", tel1[20]="123 456", tel2[20]="456 789", memo[50]="good days";

    char namex[10][20], tel1x[10][20], tel2x[10][20], memox[10][50];

    char buf[100], x, y;

    int i;


    fout=fopen("1.txt", "w");

    for(i=0;i<10;++i)

        fprintf(fout,"%s//%s//%s//%s %d\n",name,tel1,tel2,memo,i+1);    

    fclose(fout);

    fin=fopen("1.txt", "r");

    i=0;

    while(fgets(buf,100,fin)!=NULL) {

        //printf("%s", buf);

        sscanf(buf, "%[^/\n]%c%c%[^/\n]%c%c%[^/\n]%c%c%[^/\n]", 

                namex[i],&x,&y,tel1x[i],&x,&y,tel2x[i],&x,&y,memox[i]);

        printf("%s // %s // %s // %s\n", namex[i],tel1x[i],tel2x[i],memox[i]);

         i=i+1;

   }

    fclose(fin);


    return 0;

}



위의 프로그램이 이해하기가 어렵다는 지적이 있었읍니다.


#include <stdio.h>

int main() {

    FILE *fout, *fin;

    char name[20]="ABC DEF", tel1[20]="123 456", tel2[20]="456 789", memo[50]="good days";

    char namex[10][20], tel1x[10][20], tel2x[10][20], memox[10][50];

    char buf[100];

    int i, j, k;


    fout=fopen("1.txt", "w");

    for(i=0;i<10;++i)

        fprintf(fout,"%s//%s//%s//%s %d\n",name,tel1,tel2,memo,i+1);    

    fclose(fout);

    fin=fopen("1.txt", "r");

    i=0;

    while(fgets(buf,100,fin)!=NULL) {

        //printf("%s", buf);

        j=0;k=0;

        while(buf[j]!='/') namex[i][k++]=buf[j++]; namex[i][k]=0;

        j=j+2;k=0;

        while(buf[j]!='/') tel1x[i][k++]=buf[j++]; tel1x[i][k]=0;

        j=j+2;k=0;

        while(buf[j]!='/') tel2x[i][k++]=buf[j++]; tel2x[i][k]=0;

        j=j+2;k=0;

        while(buf[j]!='\n') memox[i][k++]=buf[j++]; memox[i][k]=0;

        printf("%s // %s // %s // %s\n", namex[i],tel1x[i],tel2x[i],memox[i]);

         i=i+1;

   }

    fclose(fin);


    return 0;

}


이해하기 쉬운 버젼입니다.