此代码在我的手机中运行良好,但是当我在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位数的数字,这是错误的。
答案 0 :(得分:4)
sum
未初始化为0,因此当您进行sum += soldBooks[i]
时,您会将每天的soldBooks添加到一些未定义的数字(未定义的行为)中,因此您会得到一个未知的数字。 / p>
作为未定义的行为,您可以观察到不同平台和编译器之间的差异。 这就是为什么您在一个平台(编译器会自动将变量初始化为0)和其他平台(编译器未进行此初始化)的情况下看到期望值的原因。
尽管显示了正确的值,您仍然不能在任何平台上依赖未定义的行为,因为这可能只是一个幸运的测试,或者随着不同的编译器版本等而改变... >
最后,您应该编译程序以启用所有警告。编译器应该发出警告,例如:Reading from an unitialised variable
。
答案 1 :(得分:3)
sum
未初始化。但是,您要为其添加新值,因此结果是不确定的。
首先设置sum=0;
。