0

我正在为我的考试创建一个 prog。代码工作正常,但我收到时间限制错误。如何更好地编写此代码以避免此错误?

#include <stdlib.h>
#include <stdio.h>
#include <math.h>


int main()
{
  int a, sum;

   float b, i;
   i=0;
   sum=0;
   FILE *file1;
   file1=fopen("input.txt","w");
   do{
    fscanf(file1, "%d", &a);
    if(a!=0){
     sum=sum+a;
     i++;
    }
   } while(a!=0);
   fclose(file1);
   b=(sum/i);
   printf("%f", b);
   FILE *file2;
   file2=fopen("output.txt","w");
   fprintf(file2, "%f", b);
   fclose(file2);
   return 0;
}
4

2 回答 2

2

此代码是一个潜在的问题:

   do{
    fscanf(file1, "%d", &a);
    if(a!=0){
     sum=sum+a;
     i++;
    }
   } while(a!=0);

您不检查 from 的返回值fscanf(),因此当您到达输入文件的末尾时,如果您读取的最后一个值非零,您的代码将进入无限循环。

更好的解决方案:

   do{
    int numScanned = fscanf(file1, "%d", &a);

    // break loop if fscanf() fails for any reason
    if ( numScanned != 1 ) break;

    if(a!=0){
     sum=sum+a;
     i++;
    }
   } while(a!=0);
于 2019-07-19T11:50:02.073 回答
0

您可以删除 fscanf(file1, "%d", &a); 从 do 而没有使用它,因为您正在以“w”模式打开 input.txt 文件,因此它将被截断并被视为新的空文件。所以,它里面没有任何内容。这样时间复杂度就会降低。

于 2019-07-19T11:59:07.300 回答