2017-10-24 40 views
0

이 파일에는 dictionary1.txt라는 파일이 있습니다. 발음 바로 옆에. 내가하고 싶은 일은 각 줄에서 첫 단어를 가져 와서 프로그램이 처음부터 만드는 다른 txt 파일에 인쇄하는 것입니다. 내 코드는 그렇지만 영어 단어 사이에 임의의 한자를 인쇄하기 때문에 그 이유를 모르겠습니다. 여기 .txt 파일에서 각 행의 첫 단어를 가져 와서 그 단어를 다른 .txt 파일에 인쇄하는 방법 : 일종의 종류도 있지만 임의의 문자도 인쇄

는 OUPUT 파일이 모습입니다 같은 : https://imgur.com/a/pZthP

(발음은이 dictionary1.txt에 blankspace 각 라인의 실제 단어에서 구분되는)

내 코드 :

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) { 
char line[100]; 
int i = 0; 
FILE* fp1 = fopen("dictionary1.txt", "r"); 
FILE* fp2 = fopen("dictionary2.txt", "w"); 

if (fp1 == NULL || fp2 == NULL){ 
    printf("ERROR"); 
    return -1; 
} 

while (fgets(line, 100, fp1) != NULL){ 
    while (line[i] != ' '){ 
     fputc(line[i], fp2); 
     i++; 
    } 
    i=0; 
    fputc('\0', fp2); 
} 

return 0; 
} 

나는 fputc ('\ n', fp2)도 시도했는데, 처음부터 새로 만든 파일의 다음 줄로 갈 수 없다. 나는 또한 모든 임의의 한자를 제거 할 수 없다.

편집 : 알아 냈습니다. 작업중인 .txt 파일이 유니 코드 형식으로 저장되어 프로그램에서 제대로 작동하지 않았습니다. 나는 그것을 ANSI로 바꿨고 지금은 매력처럼 작동합니다.

+3

당신의 프로그램은 ('fputc ('\ 0', fp2)'를'fputc ('\ n', fp2)'로 바꾸고 나면) 나는 개줄을 검사했다. 내가 생각할 수있는 유일한 것은 입력 라인에 처음 100 자의 공백이 들어 있지 않아서 버퍼 오버플로가 발생하고 출력 파일에서 임의의 가비지가 발생한다는 것입니다. – redxef

+0

광산이 작동하지 않습니다. 더 작은 .txt 파일로 테스트 한 결과 작동했습니다. 거대한 사전에서 실행할 때 단어 사이에 임의의 문자가 인쇄됩니다 ... –

답변

0

\ n은 모든 운영 체제 및 모든 편집자에서 올바른 행 구분 기호가 아닙니다.

메모장에서 txt 파일을 편집하는 경우 fputs ("\r\n", fp2);을 시도하십시오. 여기서 \ r은 캐리지 리턴 (커서가 줄의 첫 번째 문자로 돌아갑니다) 및 \ n 새 줄을 의미합니다.

일반적으로 Windows는 '\ r \ n'을 줄 구분 기호로 사용하고, '\ n'문자는 최소한 메모장에서는 끝 줄 이외의 것으로 표시됩니다. Linux와 Mac OS는 서로 다른 행 분리 기호를 사용합니다. 또한 fprintf(fp2, "\n"); 확인을 시도 할 수 있습니다이 밖으로 \n and \r seem to work everywhere. Why is line.separator more portable?

당신이 C++를 사용하여 괜찮다면, 당신은 출력 스트림 os을 만들려고하고 어떤 컴파일러는 자동으로 'N \'변환 할 수 os << endl 주의를 작성할 수 해당 운영 체제의 end line 문자/caracther 시퀀스로, 일부는 그렇지 않을 수도 있습니다.

while 루프 조건을 line[i] != ' ' && line[i] != '\0'으로 변경하고 fp2fclose으로 닫습니다.

+0

여전히 작동하지 않습니다. 더 작은 .txt 파일로 테스트 한 결과 작동했습니다. 나는 거대한 사전에 그것을 실행할 때 여전히 단어 사이에 임의의 문자를 인쇄합니다. 즉, 나는 이상한 또 다른 문제에 직면했다. if 컨트롤에 추가 한 두 번째 조건을 추가하면 단어도 손실됩니다. 임의의 문자 만. 편집 : '\ 0'을 '\ n'으로 수정하고 실제 단어뿐만 아니라 임의의 문자를 인쇄하는 것으로 되돌아갔습니다 ... –

+0

일반 텍스트 모드에서 파일을 열 때, c 라이브러리는'\ n'에서'\ r \ n'까지의 변환을 처리합니다. – redxef

0

.txt 파일이 유니 코드 형식을 사용하여 저장되었습니다. ANSI로 바꿨고 모든 것이 갑자기 고쳐졌습니다.