C 如何修复在其他平台上执行不相同的程序?

C 如何修复在其他平台上执行不相同的程序?,c,C,这段代码在我的手机中运行良好,但当我在昆西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

这段代码在我的手机中运行良好,但当我在昆西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);
}
考虑到投入:

100totalBooks 5*735本书一周内售出。我预计有65%的书未售出,但在2005年昆西我得到了一个6位数的数字,这是错误的。

总和没有初始化。但是,您正在向其添加新值,因此结果是未定义的。 设置总和=0;一开始,sum没有初始化为0,所以当你做sum+=soldBooks[i]时,你会把每天的soldBooks添加到一些未定义的数字上,所以你会得到一个未知的数字

由于行为未定义,您可以观察不同平台和编译器之间的差异。 这就是为什么在编译器自动将变量初始化为0的一个平台上看到预期值,而在编译器不进行此初始化的其他平台上看到意外值

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


最后,您应该编译启用所有警告的程序。编译器应该发出警告,比如:读取统一化变量。

如果scanf失败,则使用未初始化的值。每次使用时检查其返回值。如果扫描%d,则扫描对象(&S)=1{/*问题*/}。既然unsoldPercentage是错误的,您是否使用了调试器/多个printfs来检查其计算结果?为什么不在所有索引中使用一个相同的i,因为j、k和l无论如何都将等于i?更简单的方法是:char const*days[]={Mon Tue,/*…*/};还有printf%s,days[i]。这真是一段奇怪的代码。