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);

(2か所)。理由:(scanfおよび一般にC関数)は、変更される変数へのポインターが必要です。

変数を明示的に初期化することも良い習慣です(防御プログラミング)。たとえば、次のように変更します。

char typeOfWash, tireShine;

に:

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

私は明らかに、「char typeOfWash、tireShine」の行でしたよね?

いいえ、明示的な初期化子がない限り、ローカル定義は変数を初期化しません。

しかし、それはあなたの本当の問題ではありません。あなたの本当の問題は、tireShineを設定しようとしているscanfを誤って呼び出していることです。使用する

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 に答える