0

我不知道为什么它说它没有初始化,我显然是用那条char typeOfWash, tireShine;线做的,对吧?只要输入不是“g”、“G”、“p”或“P”,我的代码就可以正常工作。如果 typeOfWash == 其他任何内容然后打印“无效选择”,我还没有放入最后一种情况,但这很容易,我稍后会删除它。

#include <stdio.h>

int main()
{
//variable declarations 
char typeOfWash, tireShine;

//Menu
printf("R ---> Regular ($5.00)\n");
printf("B ---> Bronze ($7.50)\n");
printf("G ---> Gold ($10.25)\n");
printf("P ---> Platinum ($15.00)\n");
printf("Tire Shine can be added to the Gold or Platinum ONLY,");
printf("for an additional$2.50\n\n");

printf("Enter your selection: ");
scanf("%c",&typeOfWash);

switch (typeOfWash)
{
    case 'R': case 'r':
        printf("Your bill total is: $5.00\n");
        break;
    case 'B': case 'b':
        printf("Your bill total is: $7.50\n");
        break;
    case 'G': case 'g':
        printf("Would you Like a Tire Shine? (Y/N): ");
        scanf("%c",tireShine);
        if (tireShine == 'Y' || tireShine == 'y')
            printf("Your bill total is: $12.75");
        else
            printf("Your bill total is: $10.25");
        break;
    case 'P': case 'p':
        printf("Would you Like a Tire Shine? (Y/N): ");
        scanf("%c",tireShine);
        if (tireShine == 'Y' || tireShine == 'y')
            printf("Your bill total is: $17.50");
        else
            printf("Your bill total is: $15.00");
        break;
}
return 0;
}
4

3 回答 3

2

你需要改变:

    scanf("%c",tireShine);

到:

    scanf("%c", &tireShine);

(在两个地方)。原因:(scanf和一般的 C 函数)需要一个指向要修改的任何变量的指针。

显式初始化变量也是一种很好的做法(防御性编程),例如更改:

char typeOfWash, tireShine;

到:

char typeOfWash = 'R';
char tireShine = 'N';
于 2012-09-26T07:23:24.530 回答
1

我显然是用“char typeOfWash,tireShine”线做的,对吧?

不,除非有明确的初始化程序,否则局部定义不会初始化变量。

但这不是你真正的问题。你真正的问题是你调用scanf,你打算设置tireShine,不正确。采用

scanf("%c", &tireShine);

读进去。此外,如果您使用 gcc,请使用 -Wall 标志,它会警告此类误用。

于 2012-09-26T07:23:43.703 回答
1

这是不正确的:

scanf("%c",tireShine);

您需要传递的地址tireShine(您已经完成了typeOfWash):

scanf("%c", &tireShine);

请注意:

char typeOfWash, tireShine; 

是一个声明定义,它不为任何一个变量提供初始值,因此不是初始化。

于 2012-09-26T07:23:59.003 回答