2017-02-06 2 views
0

안녕하세요,C 프로그래밍 : 파일에서 읽고 인쇄하기

저는 비슷한 질문을하고 있습니다.하지만이 특별한 문제는 독특한 것 같습니다.

텍스트 파일을 문자열로 읽는 방법을 알아 내려고 문자열을 표준 출력에 쓰려고합니다. 이 코드를 시도했지만 puts()를 호출 할 때 콘솔에서 아무 것도 일어나지 않습니다. file.txt는 "hello"가 쓰여진 상태에서 제대로 생성되지만 마지막 if 문은 내 테스트 조건에 도달하지 않기 때문에 어떤 이유로 작동하지 않는 것처럼 보입니다. 이 기능을 어떻게 만들 수 있습니까?

파일을 작성한 후
#include <stdio.h> 

int main() 
{ 
    FILE *fp; 
    char str[60]; 

    fp = fopen("file.txt","w+"); 
    fprintf(fp,"%s","hello"); 
    if(fp==NULL){ 
     perror("Error opening file"); 
     return(-1); 
    } 
    if (fgets (str, 60, fp)!=NULL) 
     puts(str); 
     printf("%s","test"); 
    fclose(fp); 
return 0; 
} 
+0

프로그램 끝에 'printf ("\ n")'를 추가하십시오. – Rohan

+0

코드를 단계별로 실행할 때 디버거에서 알려주는 것은 무엇입니까? –

답변

0

fgets()으로 전화 할 때에는 파일 포인터가 이미 파일 끝에 있습니다. fgets() 앞에 rewind(fp)에 전화를 걸어주세요.

오, 파일을 여는 중에도 fprintf()으로 전화하기 전에 fp==NULL 수표를 넣으십시오.

+0

아하, 훌륭한 해결책이 너무있다. 감사합니다 –

+0

이것은 OP가 파일을''w + ''모드로 열었 음을 인정하는 유일한 대답이기 때문에 받아 들여진 대답이어야하며 잘못된 경우'if (fp == NULL) ... ' –

0

, 당신은 fclose()fp에 있고 읽기 fopen() 파일을 재 :

만 약간 수정 온라인 많은, 많은 예에 의해 주어진 코드를했다.

+1

감사합니다. 이것은 어리석은 시간이었습니다. <너무 바보 같았습니다. 나는 "w +"가 내가 읽고 쓸 수 있다고 생각했으나, 당신이 말한 것과 똑같이해야한다고 생각한다. fclen (file.txt, r) –

0

콘솔에서 파일을 읽고 인쇄하는 가장 쉬운 방법이 있습니다. freopen() 함수를 사용하여 파일을 열고 기본 STD I/O를 사용하여 파일을 읽습니다.

내 방식으로 솔루션을 다시 작성합니다.

#include <stdio.h> 

int main() 
{ 
    char str[60]; 
    FILE* x = freopen("file.txt","r",stdin); 
    if(x==NULL){ 
     printf("Error opening file"); 
     return(-1); 
    } 
    while(fgets (str, 60,stdin)){ 
     puts(str); 
    } 
    return 0; 
} 
+0

['gets()'는 절대 사용해서는 안됩니다.] (http://stackoverflow.com/questions/1694036/why-is-the-gets-function-so-dangerous-that-it-should - 사용하지 않음). C99에서는 더 이상 사용되지 않으며 현재 C 표준 인 C11에서 완전히 제거되었습니다. OP는이 기능을 사용하지 않았습니다. 왜 이걸로 바꿀까요? OP와 마찬가지로'fgets()'를 대신 사용하십시오. 또한 파일이 이전에 열리지 않았기 때문에'freopen()'을 사용하는 목적이 명확하지 않습니다. OP의 코드가 먼저 파일을 열고 데이터를 썼습니다. OP는''w + ''를 사용하기 때문에, 가장 쉬운 해결책은 파일을 읽기 전에'rewind (fp)'를 사용하는 것입니다. –

+0

응답 해 주셔서 감사합니다. 그는 fgets()를 편집하고 사용했습니다. 그는 "단순히 텍스트 파일을 문자열로 읽은 다음 표준 출력에 문자열을 쓰는 방법을 알아 내려고 시도하고 있습니다"라고했습니다. 그래서이 파일에 이미 freopen()을 사용했습니다. 내가 잘못했다면 미안해. –

+0

'fp = fopen ("file.txt", "r")'을 사용하면 기존 파일을 읽기 위해 열 수 있으며'freopen()'을 사용할 필요가 없습니다. 또한'stdin'을'x'에 앨리어스 (alias)하여 리디렉션했습니다. OP의 _code_가 수행하는 작업을 수행하도록 코드를 수정 한 경우, 즉 새 파일을 열고 해당 파일에 쓰고 그 내용을 읽으면 문제가있는 곳을 볼 수 있다고 생각합니다. –

관련 문제