Захватывающий операторы Switch из цикла For - PullRequest
0 голосов
/ 26 октября 2011
#include <stdio.h>

int i, party;
char x = ' ';
float total = 0, perCost = 0;
main(){

            switch (toupper(x)) {
                case 'A':
                    printf("Combo A: Friend Chicken with slaw [price: 4.25]");
                    perCost = 4.24;             
                    break;
                case 'B':
                    printf("Combo B: Roast beef with mashed potato [price: 5.75]");
                    perCost = 5.75;
                    break;
                case 'C':
                    printf("Combo A: Fish and chips [price: 5.25]");
                    perCost = 5.25;
                    break;
                case 'D':
                    printf("Combo A: soup and salad [price: 3.74]");
                    perCost = 3.75;
                    break;
                default:
                    perCost = 0;
                    break;
            }

    printf("Enter Party Total: ");
    scanf("%d", &party);
    for (i = 0; i < party; i++) {
            printf("Enter item ordered [A/B/C/D/X]: ");
            scanf("%c%*c", &x);
    }
    total = total + perCost;
    printf("%f\n", total);
}

Что приводит к тому, что мое программирование не захватывает оператор switch?

Ответы [ 4 ]

2 голосов
/ 26 октября 2011

Согласно данному коду, когда выполнение впервые приходит к switch(), значение x равно ' ', поэтому выполнение switch() дает perCost = 0 выполнение условия по умолчанию в switch()заставьте вас поверить, что программа захватывает switch(). (обратите внимание, что выполнение никогда не вернется сюда снова)

Чтобы достичь того, что вы предполагали, задайте switch() внутри цикла for (i = 0; i < party; i++), в частности, ниже вашего scanf.

Обратите внимание, что total = total + perCost; неуместен, на данный момент он не будет вычислять сумму, а даст только perCost последнего комбо, который вы заказали. Это также должно бытьвнутри цикла.

Вам нужен #include <cctype.h> в вашей программе.

2 голосов
/ 26 октября 2011

Я думаю, что ваш оператор switch должен быть внутри цикла:

for (i = 0; i < party; i++) {
    printf("Enter item ordered [A/B/C/D/X]: ");
    scanf("%c%*c", &x);


    //  Put your switch here.
    switch (toupper(x)) {
            case 'A':
                printf("Combo A: Friend Chicken with slaw [price: 4.25]");
                perCost = 4.24;             
                break;
            case 'B':
                printf("Combo B: Roast beef with mashed potato [price: 5.75]");
                perCost = 5.75;
                break;
            case 'C':
                printf("Combo A: Fish and chips [price: 5.25]");
                perCost = 5.25;
                break;
            case 'D':
                printf("Combo A: soup and salad [price: 3.74]");
                perCost = 3.75;
                break;
            default:
                perCost = 0;
                break;
        }



    total = total + perCost;  // Move this into the loop.

}
0 голосов
/ 26 октября 2011

Не похоже, что вы когда-либо перенаправляете логику обратно на коммутатор. Попробуйте переместить блок переключателя в функцию и вызвать его из цикла for. Или просто вставьте его в цикл for после получения ввода.

0 голосов
/ 26 октября 2011

Поскольку порядок вашего переключателя statemnt неправильный ... он должен быть внутри цикла после scanf;

Что еще более важно, я думаю, что вы смешиваете две вещи ... .1) что нужно отобразить и 2) что нужно обработать ... Попробуйте это:

#include <stdio.h>
using namespace std;

int main() {

    int i, party;
    char x = ' ';
    float total = 0, perCost = 0;

    printf("Enter Party Total: ");
    scanf("%d", &party);

    printf("Combo A: Friend Chicken with slaw [price: 4.25]");
    printf("Combo B: Roast beef with mashed potato [price: 5.75]");
    printf("Combo A: Fish and chips [price: 5.25]");
    printf("Combo A: soup and salad [price: 3.74]");

    for (i = 0; i < party; i++) {
         printf("Enter item ordered [A/B/C/D]: ");
         scanf("%c%*c", &x);

         switch (toupper(x)) {
                case 'A':
                    perCost = 4.24;             
                    break;
                case 'B':
                    perCost = 5.75;
                    break;
                case 'C':
                    perCost = 5.25;
                    break;
                case 'D':

                    perCost = 3.75;
                    break;
                default:
                    perCost = 0;
                    break;
            }

            total = total + perCost;
    }
    printf("Total is: %f\n", total);
}
...