2017-11-13 3 views
0

사용자의 입력을 받아 파일에 저장하고 싶습니다. 내 아래 코드에서 내 while 루프를 제거하면 파일이 추가되지만 사용자가 최대 500 자까지 데이터를 입력 할 수 있도록이 루프가 필요합니다.while 루프를 사용하여 데이터를 파일에 저장하지 않습니다.

int main() 
{ 
    char Buffer1[5]; 

    FILE *ot; 
    fopen_s(&ot, "D:\\export1.txt", "a+"); 

    fseek(ot, 0L, SEEK_END); 

    int sz = ftell(ot); 

    printf("Enter Data.\n"); 

    while (sz<500) { 

     for (int i = 0; i < 5; i++) { 
      scanf_s("%c", &Buffer1[i]); 
     } 

     // write data to file 

     for (int i = 0; i < 5; i++) { 
      fputc(Buffer1[i], ot); 
     } 

     sz = ftell(ot); 
    } 

    fclose(ot); 
    _gettch(); 
    return 0; 
} 
+4

'fopen'이 작동하는지 확인하는 것이 편리 할 수 ​​있습니다. 이러한 함수 호출의 나머지 부분과 함께 –

+0

파일이 이미 500 바이트로 채워진 경우 어떻게됩니까? – VTT

+1

'while' 루프를 사용하면 프로그램이 * 사용자가 500자를 입력 할 것을 주장합니다 *. 프로그램을 조기에 종료하여'fclose()'가 실행되지 않으면 파일에 대한 변경 사항이 보이지 않을 수도 있습니다. –

답변

0

이 구현은 사용자가 합계 500 바이트를 만드는 데 필요한 바이트 수를 정확하게 추가하는 경우에만 작동합니다.

먼저 파일 크기를 확인한 다음 사용자가 파일 크기가 500 자 이하인 파일을 입력하고 파일에 사용자 입력을 추가 한 후에 만 ​​입력하면됩니다.

+0

청크에 데이터를 저장하려면 어떻게해야합니까? 자동 저장과 같습니다. –

+0

사용자가 타이핑을 마쳤을 때 알 수있는 한 가지 방법이 있습니다. 일반적으로이 작업은 입력 키를 인식하여 수행됩니다. scanf는 % s 형식을 사용할 때 Enter 키를 확인하고이를 감지하면 문자 스캔을 중지합니다. 입력 키를 감지하는 한 청크 사용은 괜찮습니다. – Unh0lys0da

0
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdarg.h> 
#include <conio.h> 

#define ARRAY_LIMIT 10 
int main() 
{ 
    char array[ARRAY_LIMIT]; 
    int i = 0; 
    FILE *ot; 
    fopen_s(&ot, "export1.txt", "a+"); 

    fseek(ot, 0L, SEEK_END); 

    int sz = ftell(ot); 

    printf("Enter Data.\n"); 

    while (sz < 500) 
    { 
     while (i < ARRAY_LIMIT) 
     { 
      array[i] = getch(); 
      printf("%c", array[i++]); 
     } 
     i = 0; 
     fwrite(array, sizeof(array), 1, ot); 

     sz = ftell(ot); 
     //be on the safe side... 
     if (sz != 500 && 500 - sz < ARRAY_LIMIT) 
      i = ARRAY_LIMIT - (500 - sz); 
    } 

    fclose(ot); 
    return 0; 
} 
+0

우리가 줄일 수 있다면 더 좋을 것입니다 - 우리가 몇 번이나 쓸 수 있습니다. 그것이 내가 Buffer1 배열을 사용하는 이유입니다. –

+0

내가 틀렸을 지 정정해라. 그러나 500자를 타이핑하는 것은 어떻게해서든지 같은 것이다. .. –

+0

실제로 내가 쓸 것을 의미했던 것이 is : 파일에 쓴다.for 루프를 사용하고 있지만 fputs로 바꿀 수 있습니다. 이렇게하면 파일에 몇 번이나 쓸 수 있는지 줄일 수 있습니다. –

관련 문제