我有我的计划:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{
int r, line = 0, found = 0;
float temp, t_tot = 0;
char loc[32];
FILE *fp;
fp = fopen(argv[1], "r");
if (fp == NULL)
{
printf ("Error opening the file\n\n'");
exit(EXIT_FAILURE);
}
if (argc == 3)
{
while ((r = fscanf(fp, "%f %s\n", &temp, loc)) != EOF)
{
line++;
if (r == 2)
{
if(strcmp(argv[2], loc) == 0)
{
t_tot += temp;
found++;
}
}
else
printf ("Error, line %d in wrong format!\n\n", line);
}
printf ("The average temperature in %s is: %.1f\n\n", argv[2], (t_tot/found));
}
fclose(fp)
return 0;
}
该程序需要读取所有行并找到我在argv [2]上写的城市。比它会告诉我那个城市的平均温度,通知我文件中的一行是否格式错误。
我想知道如何“优化”这段代码以提高效率并以更“紧凑”的方式编写相同的内容。我是学生,所以所有的建议都被接受了。
答案 0 :(得分:3)
获取分析器,如GNU GProf或AMD CodeAnalyst。
另见What's the best free C++ profiler for Windows?
然后用最高优化编译你的程序,并尝试检查哪些部分需要花费很多时间。
通常应避免在没有分析器的情况下进行优化。
虽然我们正在使用它,但是你的程序并没有真正做任何需要花费大量时间的计算,而且它的性能很可能受到I / O的限制(我的猜测)。
您可以做的另一件事,而不是优化,是使其安全和正确 - 例如,如果输入文件中的字符串超过32个字符,它就不会崩溃。
答案 1 :(得分:1)
您还可以使用编译器优化选项优化目标代码。对于gcc,只需添加-O3
(或-O1
或-O2
,具体取决于优化级别)参数。
答案 2 :(得分:0)
如何改变
if (r == 2)
{
if(strcmp(argv[2], loc) == 0)
{
t_tot += temp;
found++;
}
} else {
printf ("Error, line %d in wrong format!\n\n", line);
}
进入此,避免嵌套if块:
if (r == 2 && strcmp(argv[2], loc) == 0) {
t_tot += temp;
found++;
} else if (r != 2) {
printf ("Error, line %d in wrong format!\n\n", line);
}
对我来说看起来更清洁了!