2016-12-04 1 views
1

내 코드는 지금까지 컴파일되고 실행되지만 출력 파일에서는 피보나치 수만 요구할 때 큰 정수를 제공합니다한 파일에서 숫자 읽기, 각 숫자의 fibonacci 번호 찾기 및 새 파일에 fibonacci 번호 쓰기

나는 피보나치 수를 찾기위한 루프가 정확하다고 생각한다. 제대로 작동했다는 다른 프로그램의 루프를 복사했기 때문이다.

 #include <stdio.h> 
    #include <ctype.h> 
    #define SIZE 40 

    int main(void) 
{ 
char ch, filename[SIZE]; //variables 

int num; 
int t1 = 0; 
int t2 = 1; 
int index; 
int result; 

FILE *fp; 
printf("Please enter the filename to read: "); //asking for file that is to  be read 
gets(filename); 
// "r" reads the file fopen opens the file 
if ((fp = fopen(filename, "r")) == NULL) 
{ 
    printf("Cannot open the file, %s\n", filename); 
} 
else 
{ 
    puts("Successfully opened, now reading.\n"); //reads through file counting words, upper/lowercase letters, and digits. 

    while ((num=getw(fp)) != EOF) 
    { 

    if(num == 1)  //if the nth term is 1 
    result = 0; 

    else if(num == 2) //if the nth term is 2 
    result = 1; 

    else    //for loop to start at the 3rd term 
    { 
    for(index = 2; index <= num ; index++) 
    { 
    result = t1 + t2; 
    t1 = t2; 
    t2 = result; 
    } 
    } 
    } 
} 



fclose(fp); //closing the file 

char filename2 [SIZE]; 
FILE *fp2; 

fprintf(stdout, "Please enter the file name to write in: "); //asks for file that you want to write to 
gets(filename2); 

if ((fp2 = fopen(filename2, "w")) == NULL) //"w" for writing 
{ 
    printf("Cannot create the file, %s\n", filename2); 
} 
else 
{ 
    fprintf(fp2, "%d", result); 


} 

fclose(fp2); // closing the file 
fprintf(stdout, "You are writing to the file, %s is done.\n", filename2); 

return 0; 

}

+0

getw와 (과) 사용되는 텍스트 모드의 파일은 의심 스럽습니다. 입력 파일의 샘플을 제공 할 수 있습니까? 텍스트/바이너리입니까? –

+0

input.in이라는 텍스트 파일 –

답변

0

이 다른 문제 일 수 있지만, 가장 큰 하나는 당신이 (같은 fread 할 것) 파일에서 진 정수를 읽어 getw을 사용하고 있다는 것입니다하지만 당신은에서 읽고 수를 텍스트 파일

getw()는 스트림에서 단어 (즉, int)를 읽습니다. SVr4와의 호환성을 위해 제공됩니다. 대신 fread (3)을 사용하는 것이 좋습니다.

입력 된 데이터가 가비지 (garbage)인데, 아마도 큰 정수를 설명 할 것입니다.

나는 대체 할 것이다 :

while ((num=getw(fp)) != EOF) 

while (fscanf(fp,"%d",&num)==1) 

에 의해 그래서 수가 텍스트로 읽습니다. 번호가 없거나 파일 끝에 도달하면 읽기가 중지됩니다.