2014-12-05 5 views
0

나는 책 목록을 유지하는 프로그램을 작성하고 있으며, 텍스트 파일에서 책 목록을 읽고 추가 책을 파일에 씁니다. 파일에 새 책을 추가해야하지만 각 책 항목 사이에 빈 줄을 넣고 싶습니다. 어떻게해야합니까? 유용하거나 필요할 수있는 다른 정보 : 제목, 저자 및 ISBN을 모두 문자열로 유지하는 구조를 사용하고 있습니다.텍스트 파일에 빈 줄을 쓰는 방법은 무엇입니까?

여기에 새 데이터를 수집하는 부분이 있습니다. 링크 된 목록에 삽입됩니다. 관련 부분

input_file = fopen("library.txt", "w"); 
printf("Printing list to file...\n"); 
while(current != NULL) 
{ 
    fprintf(input_file,"%s%s%s", current->title, current->author, current->ISBN); 
    //fputs(newline, input_file);  
} 

:

puts("Enter first book title."); 
while(fgets(input, 80, stdin) != NULL && input[0] != '\n') 
{ 
current = (struct book *)malloc(sizeof(struct book)); 
if(head == NULL) 
    head = current; 
else 
    prev->next = current; 
current->next = NULL; 

strcpy(current->title, input); 
puts("Enter the author."); 
fgets(current->author, 80, stdin); 
puts("Enter the ISBN."); 
fgets(current->ISBN, 80, stdin); 

puts("Enter next book title (empty line to quit)"); 
prev = current; 
} 

다음은 파일에 기록하는 부분입니다. 주석 처리 된 부분은 시도했지만 이미 개간 된 줄 바꿈을 사용하여 이미 형식이 잘 정립 된 데이터를 엉망으로 만듭니다. 나는 책을 추가하고 프로그램이 파일에 쓸 때

Title 1 
Last, First 
000000 (ISBN) 

Title 2 
Last, First 
111111 

etc. 

, 그것은 다음과 같이 추가한다 (명확성을 위해 ISBN을 왼쪽 : 다음은 텍스트 파일을 보는 방법의 작은 예 (착색 무시를)입니다) :

... 
Title 2 
Last, First 
First Added Book 
Last, First 
Second Added Title 
Last, First 
etc. 

어떻게 각 책 항목 사이에 빈 줄을 가져올 수 있습니까?

+2

'는 fgets()는'('\ n'') 문자가 추가 여분의 줄 바꿈하여 데이터를 받고있다. 파일에 인쇄하면 그 파일이 옮겨집니다. 파일의 빈 줄은 다른 문자가없는 줄 바꿈 문자입니다. –

+0

'while'에'fputs ("\ n", input_file);을 추가하십시오. – OiciTrap

+0

\ n을 추가하려고 시도했지만 추가 된 책뿐만 아니라 텍스트 파일에 줄 바꿈이 더 많이 추가되었습니다. –

답변

1

왜이 줄에 개행 문자 (\ n)를 삽입하면 안됩니까?

fprintf(input_file,"%s%s%s", current->title, current->author, current->ISBN); 

-> 당신이 \ n 더 추가하면

fprintf(input_file,"%s%s%s\n", current->title, current->author, current->ISBN); 

가 참고로, 더 많은 빈 줄을 얻을.

+0

그는 입력에서 개행을 제거하지 않았기 때문에 모든 줄이 이중 간격 (위의 @Zak에 의해 주석 처리됨)이됩니다. –

+0

이 질문을 읽는 방법은 그의 출력 형식은 제목, 이름 및 ISBN을 한 줄에 하나씩 입력 한 다음 책을 구분하는 빈 줄을 쓴 것입니다. 그게 그가 원한 것이라면 입력에서 개행을 제거하지 않아도되고 ISBN 뒤에 하나 더 삽입해야합니다. – midor

+0

필자는 파일 끝에 새로운 책을 추가하는 기능을 만들었습니다. 즉, 이미 책의 형식을 엉망으로 만들지는 않을 것입니다. 벙어리 솔루션처럼 보이지만, 작은 덩어리로 나누고 이러한 덩어리를 처리하는 함수를 작성하는 것이 좋습니다. –

0
  1. input에 남겨둔다. (# 4도 참조하십시오)
    이 코드는 종료가 '\n' 인 입력에 대해 작업하려고합니다. @Lee 다니엘 크로커

    while(fgets(input, 80, stdin) != NULL) { 
    
        size_t len = strlen(input); 
        // Note: under select circumstances, len will be 0. 
        if (len > 0 && input[i-1] == '\n') input[--len] = 0; 
    
        // replace `&& input[0] != '\n'` with 
        if (len == 0) break; 
    
  2. 하나 또는 두 개의 '\n' 여기에 추가합니다. @midor

    fprintf(input_file,"%s%s%s\n", ... 
    
  3. 마이너 : malloc()을 단순화합니다. 이후 fgets()

    // current = (struct book *)malloc(sizeof(struct book)); 
    current = malloc(sizeof *current); 
    
  4. 확인 반환 값. 후행 \n'도 제거해야합니다.

  5. malloc() 이후에는 전체 구조를 초기화하는 것이 좋습니다.

    current = malloc(sizeof *current); 
    if (current == NULL) Handle_OOM(); 
    memset(current, 0, sizeof *current); 
    
    // or 
    
    current = calloc(1, sizeof *current); 
    
관련 문제