我的输出答案有什么问题?
Whats wrong with my output answer?
大家好,这是我的第一个问题,希望能得到一些帮助。
尽管计算正确,但基本上输出是错误的!!
每当我向 'total' 添加超过 7 个变量时,输出就会损坏
输出的 7 个及更少的变量给出了正确答案??!!
这是我的编码我需要你的帮助 Guyz
#include <stdio.h>
void main()
{
float total = 0, necklace, scarf, cotton, Lace, Hijab, h, m, l, z;
int ch, q;
printf("\nFashion : \n1.Fashion Necklace <Price=RM29>\n2.Scarf <Price=RM25>\n3.Cotton T-shirts <Price=RM35>\n4.Lace Blazer <price=RM33>\n5.Set of 2 Hijab <price=RM35>\n6.Fleece-Lined Hoodie <price=RM49>");
printf("\nEnter Your Choice : ");
scanf("%d", &ch);
if (ch < 10)
{
printf("\nEnter Quantity : ");
scanf("%d", &q);
if (ch == 1)
{
necklace = 29 * q;
}
else if(ch == 2)
{
scarf = q * 25;
}
else if(ch == 3)
{
cotton = 35 * q;
}
else if(ch == 4)
{
Lace = 33 * q;
}
else if(ch == 5)
{
Hijab = 35 * q;
}
else if(ch == 6)
{
h = 49 * q;
}
else if(ch == 7)
{
m = 20 * q;
}
else if(ch == 8)
{
l = 40 * q;
}
else if(ch == 9)
{
z = 15 * q;
}
}
else
{
printf("\nInvalid Choice!!!");
}
total = (scarf + necklace + cotton + Lace + Hijab + h + m + l + z);
printf("\nTotal = RM%.2f", total);
}
问题是您没有初始化所有这些变量,这意味着它们的值将是不确定的并且您将有未定义的行为 .
如果将所有这些变量初始化为零,它应该可以工作。
你得到错误值的原因是因为上面和你在程序中只设置了一个变量,将它添加到所有未初始化的变量中。所以在实践中发生的事情是您将许多看似随机的值添加到单个计算值并将其打印为输出。
你还没有初始化你的值,这是一个很好的编码习惯,尤其是当你在求和中使用它时。例如:
int = x ,y ; // 你没有初始化所以 x 和 y 有一个随机数
整数总和=x+y; //会给你一个错误的答案,因为如果你不告诉他,编译器不会给他们零。
int = x =5 ,y = 0;
整数总和=x+y; //导致 5 .
未初始化的变量将return分配的内存位置中的任何内容,都将是垃圾。
您必须初始化所有使用的变量。
请考虑以下代码。
int a,b;
a=5;
printf("\na= %d b= %d",a,b);
保证a会return5但没人知道b会return。
因为您不知道为变量 b.
保留的内存中存储了什么
大家好,这是我的第一个问题,希望能得到一些帮助。 尽管计算正确,但基本上输出是错误的!! 每当我向 'total' 添加超过 7 个变量时,输出就会损坏 输出的 7 个及更少的变量给出了正确答案??!! 这是我的编码我需要你的帮助 Guyz
#include <stdio.h>
void main()
{
float total = 0, necklace, scarf, cotton, Lace, Hijab, h, m, l, z;
int ch, q;
printf("\nFashion : \n1.Fashion Necklace <Price=RM29>\n2.Scarf <Price=RM25>\n3.Cotton T-shirts <Price=RM35>\n4.Lace Blazer <price=RM33>\n5.Set of 2 Hijab <price=RM35>\n6.Fleece-Lined Hoodie <price=RM49>");
printf("\nEnter Your Choice : ");
scanf("%d", &ch);
if (ch < 10)
{
printf("\nEnter Quantity : ");
scanf("%d", &q);
if (ch == 1)
{
necklace = 29 * q;
}
else if(ch == 2)
{
scarf = q * 25;
}
else if(ch == 3)
{
cotton = 35 * q;
}
else if(ch == 4)
{
Lace = 33 * q;
}
else if(ch == 5)
{
Hijab = 35 * q;
}
else if(ch == 6)
{
h = 49 * q;
}
else if(ch == 7)
{
m = 20 * q;
}
else if(ch == 8)
{
l = 40 * q;
}
else if(ch == 9)
{
z = 15 * q;
}
}
else
{
printf("\nInvalid Choice!!!");
}
total = (scarf + necklace + cotton + Lace + Hijab + h + m + l + z);
printf("\nTotal = RM%.2f", total);
}
问题是您没有初始化所有这些变量,这意味着它们的值将是不确定的并且您将有未定义的行为 .
如果将所有这些变量初始化为零,它应该可以工作。
你得到错误值的原因是因为上面和你在程序中只设置了一个变量,将它添加到所有未初始化的变量中。所以在实践中发生的事情是您将许多看似随机的值添加到单个计算值并将其打印为输出。
你还没有初始化你的值,这是一个很好的编码习惯,尤其是当你在求和中使用它时。例如:
int = x ,y ; // 你没有初始化所以 x 和 y 有一个随机数 整数总和=x+y; //会给你一个错误的答案,因为如果你不告诉他,编译器不会给他们零。
int = x =5 ,y = 0; 整数总和=x+y; //导致 5 .
未初始化的变量将return分配的内存位置中的任何内容,都将是垃圾。 您必须初始化所有使用的变量。 请考虑以下代码。
int a,b;
a=5;
printf("\na= %d b= %d",a,b);
保证a会return5但没人知道b会return。 因为您不知道为变量 b.
保留的内存中存储了什么