如何修复在其他平台上无法执行的程序?

时间:2019-07-15 08:19:39

标签: c

此代码在我的手机中运行良好,但是当我在Quincy 2005上使用此代码时,其输出与正确的输出相差很大。请帮助我。

#include <stdio.h>

int main()
{
    int totalBooks, soldBooks[7], sum, unsoldPercentage;

    char days[7] = { 'S', 'M', 'T', 'W', 'T', 'F', 'S' };
    char Days[7] = { 'u', 'o', 'u', 'e', 'h', 'r', 'a' };
    char dayS[7] = { 'n', 'n', 'e', 'd', 'u', 'i', 't' };

    printf("Enter the quantity of all books you have: ");
    scanf("%d", &totalBooks);

    int j = 0, k = 0, l = 0;

    for (int i = 0; i < 7; i++)
    {
        printf("%c%c%c: ", days[j++], Days[k++], dayS[l++]);
        scanf("%d", &soldBooks[i]);

        sum += soldBooks[i];
    }

    unsoldPercentage = (totalBooks - sum) * 100 / totalBooks;

    printf("%d%% of books are unsold.", unsoldPercentage);
}

考虑输入:

100(总数)5 * 7((35)整周售出的书)。我希望输出结果是“ 65%的书未售出。”但是在Quincy 2005中,我得到了一个6位数的数字,这是错误的。

2 个答案:

答案 0 :(得分:4)

sum未初始化为0,因此当您进行sum += soldBooks[i]时,您会将每天的soldBooks添加到一些未定义的数字(未定义的行为)中,因此您会得到一个未知的数字。 / p>

作为未定义的行为,您可以观察到不同平台和编译器之间的差异。 这就是为什么您在一个平台(编译器会自动将变量初始化为0)和其他平台(编译器未进行此初始化)的情况下看到期望值的原因。

尽管显示了正确的值,您仍然不能在任何平台上依赖未定义的行为,因为这可能只是一个幸运的测试,或者随着不同的编译器版本等而改变...

最后,您应该编译程序以启用所有警告。编译器应该发出警告,例如:Reading from an unitialised variable

答案 1 :(得分:3)

sum未初始化。但是,您要为其添加新值,因此结果是不确定的。 首先设置sum=0;