2015-01-26 7 views
0

아주 간단한 편집기를 쓰고 있습니다. 나는 프로그램을 stdin에서 읽은 다음 바로 지금 stdout으로 출력한다 (아래 코드 참조). 파일을 가져올 프로그램을 원한다면 명령에 따라 파일에 더 많은 텍스트를 인쇄하거나 추가하십시오. 나는 아직도 관련 질문을 읽은 후에 이것을 어떻게하는지 혼란 스럽다. scanf를 사용하여 파일을 읽은 다음 printf를 사용하여 동일한 파일에 인쇄합니까? 모든 설명은 크게 감사드립니다.간단한 C 텍스트 스캔 및 인쇄

#include <stdio.h> 

#define MAX_LINES 10 

char text[MAX_LINES][MAX_LINES]; 


int main(void){ 
    FILE *infile; 
    infile = fopen("file.txt", "w"); 

    //check for file 
    if(infile==NULL){ 
     puts("Error--no file found"); 
     } 


    int count, x, y; 
    printf("Enter to quit the program.\n"); 

    for(count=1; count<MAX_LINES+1; count++){ 
     printf("%d: ", count); 
     fgets(text[count], MAX_LINES, stdin); 

    } 

    for(x=0; x<count; x++){ 
     for(y=0;text[x][y];y++){ 
      putchar(text[x][y]);} 
     putchar('\n'); 
    } 
    fclose(infile); 
    return 0; 
//end program 
} 
+1

거의 모든 편집자가 임시 파일을 작성한 다음 닫고 이전 파일의 연결을 해제하고 임시 파일의 이름을 바꿉니다. – stark

+1

'scanf()'는 공백을 신경 쓰지 않지만 파일을 편집하는 사람들은'scanf()'를 사용하지 않을 것입니다. (네, 그렇다고해도 고생 할 수는 있지만 힘든 일이지만 보람이 없습니다.) 코드는 훨씬 더 합리적인 선택 인 fgets()를 사용하는 것을 보여줍니다. 선의 최대 폭에서 선의 수를 분리해야합니다. 임의로 긴 행을 처리하기 때문에 입력에 대해 POSIX ['getline()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)에 대해 생각할 필요가 있습니다. ''infile' "을 쓰기 전용으로 열고'stdin'에서 실제로 읽습니다. –

+0

infile에서 읽고 infile에 텍스트를 추가하는 방법이 있습니까? (stdout 대신?) –

답변

0

프로그램이 "stdin에서 읽기"하지 않습니다, 그것은 그 파일에 기록하지 않습니다, 명명 된 파일에서 읽지 만.

그리고 여기이 될 것이라고

char text[MAX_LINES][MAX_LINES]; 

또 다른 혼란이다 더 나은로

#define MAX_LINES 10 
#define MAX_LENGTH 1000 
... 
char text[MAX_LINES][MAX_LENGTH]; 

다음,이 배열의 0 번째 요소를 무시합니다

for(count=1; count<MAX_LINES+1; count++) 

이 루프보고 마지막과 경계를 벗어나십시오. 그것은이 stdin입니다 만 파일이 열린 디스크 파일 인 경우, 당신은 읽기 파일

fgets(text[count], MAX_LINES, infile); 

의 끝을 안타 확인과 함께 교체해야 infile

for(count=0; count<MAX_LINES; count++) 

해야한다

if (fgets(text[count], MAX_LENGTH, infile) == NULL) 
    break; 

귀하의 질문 이 infile이라고 할 텍스트를 INFILE 읽고 추가 모두 방법이 댓글을 달았습니다? 네, 그렇지만 그건 불가능합니다. @JonathanLeffler가 "새 파일을 먼저 준비하십시오"라고 썼습니다..

+0

좋습니다. 그래서 나는 그 변화를 만들었고, 지금은 여전히 ​​약간 혼란 스럽습니다. 이제 텍스트 편집기에서 텍스트를 입력 할 수 없습니다. infile을 준비하는 방법이 있습니까? 그런 다음 stdin을 사용하여 파일에 씁니다. –