2016-12-04 5 views
1

これまでのコードはコンパイルして実行しますが、出力ファイルではフィボナッチ数ファイルから数値を読み込み、各数値のフィボナッチ数を見つけ、新しいファイルにフィボナッチ数を書き込む

私はフィボナッチ数を見つけるループが正しいと思います。なぜなら、適切に機能していた別のプログラムからループをコピーしたからです。

 #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)を使用することをお勧めします。

入力データがガベージであるため、おそらく大きな整数が説明されています。

私が代わる:

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

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

でそう数がテキストとして読み込まれます。また、ファイルの非番号または末尾に達すると読み取りが停止します。

関連する問題