这里我的问题是计算从文件中获取输入的无限整数的总和。该文件在由空格分隔的行中包含无限的整数。如果那些,我还需要显示无效的输入整数输入包含任何其他字符或符号。我尝试过这段代码并输出得很好 这是我的代码......
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");
}
代码执行得很好。但这里的问题是代码超出了我的时间限制。请帮助我,以便我可以获得更好的代码
答案 0 :(得分:1)
您可以以块的形式读取文件,从而加快读取整数的速度。对于提示,请查看此链接中的fread()示例(在链接页面中搜索例如“sentinel”):How do I process a text file in C by chunks of lines?此外,请查看对该答案的评论,例如:好主意做malloc而不是堆栈分配,也许使用二进制模式,注意关于EOF等。
答案 1 :(得分:0)
答案 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);
}
(请注意,它没有经过测试,但我有信心)