2014-05-21 8 views
0

나는 일반 텍스트 파일을 읽고 모든 단어를 다른 텍스트의 숫자로 씁니다. 줄이 끝나면 "줄 바꿈 문자 (\ n)"를 찾고 새 줄에서 계속됩니다. 우분투에서는 완벽하게 실행되지만 Windows (DevC++)에서는 기능을 실행할 수 없습니다. 내 문제는 내가 읽은 Windows 텍스트에 줄 바꿈 문자가 없다는 것입니다. 심지어 내 손으로 프로그램을 볼 수없는 새로운 줄을 추가했습니다. 라인 끝에 문자를 인쇄하려고 할 때, 공백 (ascii = 32)이고 나는 라인의 끝이라고합니다. 여기에 제 제어 코드 끝이 있습니다. 문제를 해결하려면 어떻게해야합니까? 그리고 나는 "캐리지 리턴 (\ r)"이라는 문자에 대해 읽었지만 내 문제를 해결하지 못한다.행의 끝 문자/캐리지 리턴

c = fgetc(fp); 
printf("%d", c); 
fseek(fp, -1, SEEK_SET); 
if(c == '\n' || c == '\r') 
    fprintf(fp3, "%c%c", '\r', '\n'); 
+3

창문 라인 구분자는 "\ 연구 \ n을"입니다. –

+0

어떻게하면 '\ r \ n'과 같은 if 문으로 함께 언급 할 수 있습니까?) @ElliottFrisch – mrtgnccn

+2

문제는 Windows가 줄 끝에서 한 문자를 사용하지 않는다는 것입니다. 그것은 두 가지를 사용합니다. 먼저 캐리지 리턴 ('\ r') 다음 새 줄 ('\ n'). Mac의 고대 버전 (예 : X 이전 버전)은 '\ r'만을 사용했습니다. –

답변

2

당신은 바이너리 모드 대신 "rb"

FILE *fp = fopen(fname, "r"); 

이 열립니다 텍스트 모드 대신 "r" 모드에서 파일을 개최 열어 줄 바꿈 변환을 텍스트 파일을 열고 원하는 경우 어떤 텍스트 파일에 대해 원하는 것입니다. 리눅스에 차이가있을 나타나지 않을 것이다, 그러나 창에 \r\n\n

에 보인다 가능한 솔루션을 변환됩니다, 직접 int 변수로 파일 중 숫자를 읽는 것입니다.

int n; 
fscanf(fp, "%d", &n); 

개 글자가 중요한 의미가 아니라면.

+0

"rb"및 "r"파일을 모두 열려고했습니다. ; 다른 점이 없다. 내 텍스트는 내가 생각하는 새로운 라인을 가지고 있지는 않지만, 나는 그들 자신을 넣었다. 나는 그 문제를 이해하지 못한다. 문제는 텍스트 파일에 관한 것일 수 있습니까? – mrtgnccn

+0

@mrtgnccn에 개행 문자가없는 경우 왜 '\ n'을 검사할까요? –

0

여기에 몇 가지 질문

  1. 창 텍스트 줄 바꿈과 유닉스 텍스트 줄 바꿈의 차이점은 무엇입니까?

    UNIX 개행 문자는 LF 전용입니다. ASCII 코드 0x0a. Windows 개행 문자가 CR + LF입니다. ASCII 코드 0x0d 및 0x0a

  2. 파일에 LF 또는 CR이 있습니까?

    파일의 내용을 보려면 16 진수 편집기를 사용하십시오. 나는 xxd를 리눅스에서 사용한다.

    $ xxd unix.txt 
    0000000: 0a0a 
    $ xxd windows.txt 
    0000000: 0d0a