0

我有我的程序:

#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] 上写的城市。它会告诉我那个城市的平均温度,如果文件中的一行格式错误,它会通知我。

我想知道如何“优化”此代码以提高效率并以更“紧凑”的方式编写相同的内容。我是学生,所以所有建议都被接受。

4

3 回答 3

3

获取像 GNU GProf 或 AMD CodeAnalyst 这样的分析器。

另请参阅适用于 Windows 的最佳免费 C++ 分析器是什么?

然后以最高优化编译您的程序,并尝试检查哪些部分往往需要很多时间。

通常应避免在没有分析器的情况下进行优化。


当我们这样做时,您的程序实际上并没有进行任何需要花费大量时间的计算,并且它的性能可能会受到 I/O 的限制(我的猜测)。

您可以做的另一件事,而不是优化,是让它安全和正确- 例如,如果输入文件中的字符串长度超过 32 个字符,它就不会崩溃。

于 2012-06-23T11:01:14.053 回答
1

您还可以使用编译器优化选项优化目标代码。对于 gcc,只需添加-O3(或-O1-O2,取决于优化级别)参数。

于 2012-06-23T13:31:03.243 回答
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);
}

对我来说看起来干净多了!

于 2012-06-23T10:24:44.587 回答