未初始化的double在第二次调用函数时有值结转(头一个C示例)
因此,我在自学编程,并在编写《头先c》一书中的price_Diverss.c程序: 如果前两个输出看起来很好,则自动将total设置为0,但是函数的第三个调用似乎继承了前一个调用的值。我只是好奇为什么会这样未初始化的double在第二次调用函数时有值结转(头一个C示例),c,linux,C,Linux,因此,我在自学编程,并在编写《头先c》一书中的price_Diverss.c程序: 如果前两个输出看起来很好,则自动将total设置为0,但是函数的第三个调用似乎继承了前一个调用的值。我只是好奇为什么会这样 我知道最佳实践可能要求您总是初始化变量,我只是因为懒惰而遇到了这个奇怪的错误。您从堆栈中获得了一些随机值。它可以是任何东西 这不是最佳实践。在使用变量之前,必须初始化变量。或者任何事情都可能发生。您的代码具有未定义的行为。您不能期望它产生任何特定的输出。谢谢,我将确保从现在开始初始化我的变量
我知道最佳实践可能要求您总是初始化变量,我只是因为懒惰而遇到了这个奇怪的错误。您从堆栈中获得了一些随机值。它可以是任何东西
这不是最佳实践。在使用变量之前,必须初始化变量。或者任何事情都可能发生。您的代码具有未定义的行为。您不能期望它产生任何特定的输出。谢谢,我将确保从现在开始初始化我的变量!谢谢,我会记住的!
#include <stdio.h>
#include <stdarg.h>
enum drink { MUDSLIDE, FUZZY_NAVEL, MONKEY_GLAND, ZOMBIE };
double price(enum drink d){
switch(d) {
case MUDSLIDE:
return 6.79;
case FUZZY_NAVEL:
return 5.31;
case MONKEY_GLAND:
return 4.82;
case ZOMBIE:
return 5.89;
}
return 0;
}
double total(int args, ...){
double total;
va_list ap;
va_start(ap, args);
int i;
for(i = 0; i < args; i += 1){
enum drink d = va_arg(ap, enum drink);
total = total + price(d);
}
va_end(ap);
return total;
}
int main(){
printf("Price is %.2f\n", total(2, MONKEY_GLAND, MUDSLIDE));
printf("Price is %.2f\n", total(3, MONKEY_GLAND, MUDSLIDE, FUZZY_NAVEL));
printf("Price is %.2f\n", total(1, ZOMBIE));
return 0;
}
$ ./a.out
Price is 11.61
Price is 16.92
Price is 22.81