2014-03-25 4 views
-1

.dat 파일을 열고 쓰려고합니다. 파일은 단순한 일련의 숫자 일 뿐이지 만 추가하고 싶습니다. 지금 fputs는 나를 위해 일하지 않습니다.파일에 쓰려고 시도 중

작업을 수행하는 데 올바른 기능을 사용하고 있는지 궁금합니다. 지금은 정수를 사용할 수 없다고 말했습니다. fputs은 정수 문자가 아니기 때문에 fputs에 있습니다.

사용자에게 파일에 정수를 추가하라고합니다. 내 다음 단계는 문자열, 수레, 문자 등을 추가하는 것입니다. 그러나 작동중인 무언가를 얻는 것이 좋습니다.

#DEFINE의 _CRT_SECURE_NO_WARNINGS #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE

//functions called 

//why is it void? 
int main(void) 
{ 

    FILE *pFile; 
    int choice = 0; 
    char buf[40]; 
    int i = 0; 
    int num[40]; 
    int enter_this; 

    printf("WELCOME. \n\n"); 
    pFile = fopen("test.dat", "r"); 
    if (pFile != NULL) 

    for (i = 0; i < 8; i++) 
    { 
     //get num 
     fgets(buf, sizeof(buf), pFile); 
     num[i] = atoi(buf); 

     printf("#%i = %i\n", i, num[i]); 
    } 


    printf("Enter number to be added: "); 
    gets_s(buf); 
    enter_this = atoi(buf); 
    fputs(enter_this, pFile); 
    fclose(pFile); 

    system("pause"); 

}//end main 
+2

'INT fputs (const를 숯불 * str을, 파일 * 스트림)' – tesseract

+0

는 그래서 내가 파일에 입력하면 모든 문자열로 간주 될 수 있음을 의미합니까? 적어도 내가 그것을 읽고 버퍼에 던져서 정수를 말하자면? – user3255517

+0

fputs에'문자열에 대한 포인터 '를 넘겨야한다는 것을 의미합니다. 정수를 전달하고 있습니다. 파일에 숫자를 쓰려면 fprintf() 또는 이와 유사한 함수를 사용할 수 있습니다. – tesseract

답변

1
int main(void) 

이 경우 '무효'는 것을 의미 함수 'main'은 인수를 허용하지 않습니다. C에 빈 괄호를두면 함수가 가변 개수의 인수를 허용한다는 것을 의미합니다. 예상되는 것처럼 0이 아닙니다. 이 파일의 마지막에 번호를 추가하려면

, 당신은 "모드를 추가"에서 열해야합니다

FILE *pFile = fopen("test.dat", "a"); 

두 번째 인수는 "a"는 모드 문자열입니다. 그것은 fopen에게 파일을 추가하기 위해 열도록 지시합니다. 즉, 데이터는 파일의 끝에 기록됩니다. 파일이 없으면 파일이 작성됩니다. 현재 "읽기 전용"모드로 파일을 여는 중입니다. &은 전혀 쓸 수 없습니다. fopen이 걸리는 다른 모드 문자열에 대해 읽어보십시오 here.

파일 포인터가 NULL인지 확인하는 것도 중복됩니다. 포인터가 NULL이 아닐 때 실행할 블럭을 'if'에 전달했습니다. 다음과 같이되어야합니다 :

if (!pFile) { 
    puts("Something went wrong"); 
    exit(1); 
} 

마지막으로 fputs는 STRING 값, 즉 문자 상수를 취합니다. 그것은 정수이기 때문에 enter_this와 작업하는 것을 거부합니다. 파일에 정수를 쓰는 한 가지 방법은 fprintf을 사용하는 것입니다. 예를 들어 :

/* Write the integer enter_this & a newline to pFile */ 
fprintf(pFile, "%d\n", enter_this);