通过从C中的文件中获取输入来获得无限整数的总和

时间:2016-06-10 10:21:53

标签: c

这里我的问题是计算从文​​件中获取输入的无限整数的总和。该文件在由空格分隔的行中包含无限的整数。如果那些,我还需要显示无效的输入整数输入包含任何其他字符或符号。我尝试过这段代码并输出得很好 这是我的代码......

void main()
{
  int i=1,j,a[100000],total=0,r=0;
  char discard,buffer[1024];
  FILE *fp;
  char filename[100];
  scanf("%s",filename);
  fp=fopen(filename,"r");
  do
  {
    fscanf(fp,"%1024s%c",buffer,&discard);
    r+=sscanf(buffer,"%d",&a[i]);
    total+=a[i++];
  } while(discard!='\n');
  if(r==i-1)
  {
    printf("\n%d",total);
  }
  else
    printf("\n Invalid Input");
}

代码执行得很好。但这里的问题是代码超出了我的时间限制。请帮助我,以便我可以获得更好的代码

3 个答案:

答案 0 :(得分:1)

您可以以块的形式读取文件,从而加快读取整数的速度。对于提示,请查看此链接中的fread()示例(在链接页面中搜索例如“sentinel”):How do I process a text file in C by chunks of lines?此外,请查看对该答案的评论,例如:好主意做malloc而不是堆栈分配,也许使用二进制模式,注意关于EOF等。

答案 1 :(得分:0)

  1. 获取文件大小
  2. 通过malloc
  3. 分配动态内存缓冲区
  4. 将所有文件读入已分配的内存缓冲区。
  5. 从内存缓冲区中执行其他操作。

答案 2 :(得分:0)

我不知道这是否会提高性能,但代码更具可读性,我也删除了堆栈缓冲区的使用

void main()
{
  int value = 0, total = 0, r = 0;
  char discard;
  FILE *fp;
  char filename[100];
  scanf("%s",filename);
  fp = fopen(filename,"r");
  do
  {
    r = fscanf(fp, "%d%c", &value, &discard);
    if (r != 2 || (discard != ' ' && discard != '\n'))
    {
      printf("\n Invalid Input");
      return;
    }
    total += value;
  } while(discard != '\n');
  printf("\n%d", total);       
}

(请注意,它没有经过测试,但我有信心)