[App 개발] 질문... 파일입출력시 인코딩
본문
간단한 자막 싱크 변환 프로그램인데요.
그냥 다음과 같이 하면 된다고 생각했는데,
텍스트 편집기에서 열면 원래 인코딩(한국어(windows,dos))으로 열 수 없답니다.
제가 오브젝티브 C의 기본만 알고 NS객체들에 대해 무지하지만 그쪽으로 해결할 수 있으면 좋겠습니다. 배우고자 하는 마음에서..
어떻게 바꾸는 게 좋을까요? 조언을 부탁드립니다.
소스는 다음과 같습니다.
#include <stdio.h>
void main()
{
        FILE *fp,*wfp;
        int ch;
        int a=0, b=0, c=0;
        printf("\\n Shift sync by: "); scanf("%d",&b);
        fp=fopen("abc","r");
        wfp=fopen("bcd.smi","w");
        do {
                ch=getc(fp);
                putc(ch,wfp);
                if (a== 0){ if(ch=='<') a= 1; }
                else if (a== 1){ if(ch=='S') a= 2; else a= 0; }
                else if (a== 2){ if(ch=='Y') a= 3; else a= 0; }
                else if (a== 3){ if(ch=='N') a= 4; else a= 0; }
                else if (a== 4){ if(ch=='C') a= 5; else a= 0; }
                else if (a== 5){ if(ch==' ') a= 6; else a= 0; }
                else if (a== 6){ if(ch=='S') a= 7; else a= 0; }
                else if (a== 7){ if(ch=='t') a= 8; else a= 0; }
                else if (a== 8){ if(ch=='a') a= 9; else a= 0; }
                else if (a== 9){ if(ch=='r') a=10; else a= 0; }
                else if (a==10){ if(ch=='t') a=11; else a= 0; }
                else if (a==11){
                        a= 0;
                        if(ch=='=') {
                                c=0;
                                while((ch=getc(fp)) >= '0' && ch <= '9'){
                                        c = 10*c + (int)ch - (int)'0';
                                }
                                fprintf(wfp, "%d", c+b);
                                putc(ch,wfp);
                                continue;
                        }
                }
        } while (ch!=EOF);
        fclose(wfp);
        fclose(fp);
}
최신글이 없습니다.
최신글이 없습니다.
댓글목록 2
hongjuny님의 댓글
안녕하세요.
루프 돌릴때 약간 논리적인 모순이 있었어요. ^^ 그 부분만 약간 손보면 문제없이 동작 될 겁니다. 그리 잘 짜진 않았지만 대략 이런 부분에서 문제가 있었음을 보이는 데 충분한 소스를 첨부해 드릴테니 참고하십시오.
#include <stdio.h>
int main (int argc, const char * argv[]) {
FILE *fp,*wfp;
int ch;
int a=0, b=0, c=0;
printf("\\n Shift sync by: "); scanf("%d",&b);
fp=fopen(argv[1],"r");
wfp=fopen("test.smi","w");
do {
ch=getc(fp);
if (a== 0){ if(ch=='<') a= 1; }
else if (a== 1){ if(ch=='S') a= 2; else a= 0; }
else if (a== 2){ if(ch=='Y') a= 3; else a= 0; }
else if (a== 3){ if(ch=='N') a= 4; else a= 0; }
else if (a== 4){ if(ch=='C') a= 5; else a= 0; }
else if (a== 5){ if(ch==' ') a= 6; else a= 0; }
else if (a== 6){ if(ch=='S') a= 7; else a= 0; }
else if (a== 7){ if(ch=='t') a= 8; else a= 0; }
else if (a== 8){ if(ch=='a') a= 9; else a= 0; }
else if (a== 9){ if(ch=='r') a=10; else a= 0; }
else if (a==10){ if(ch=='t') a=11; else a= 0; }
else if (a==11){
a= 0;
if(ch=='=') {
putc(ch,wfp) ;
c=0;
while((ch=getc(fp)) >= '0' && ch <= '9'){
c = 10*c + (int)ch - (int)'0';
}
fprintf(wfp, "%d", c+b);
putc(ch,wfp);
continue;
}
}
if( ch == EOF ) break ;
putc((unsigned char)ch,wfp) ;
} while (ch!=EOF);
fclose(wfp);
fclose(fp);
return 0 ;
}
이상훈님의 댓글
아하.. 홍준님 소스를 보니 EOF가 문제였군요 ^^ 그 부분을 해결하니 잘 됩니다. 감사합니다 ^^