Почему цикл не останавливается? - PullRequest
2 голосов
/ 24 апреля 2019
#include <stdio.h>
#include <stdlib.h>

#define NEWGEAR 15.0
#define USEDGEAR 5.0

int main() {
    int type;
    int num_items;
    float total;

    printf("Welcome to the market\n");
    printf("What would you like to do\n");
    printf("\t1-Buy New Gear\n");
    printf("\t2-Buy used gear\n");
    printf("\t3-Quit\n");

    scanf("%d", &type);

    while (type != 3) {
        switch (type) {
        case 1:
            printf("How many new items would you like?\n");
            scanf("%d", &num_items);
            total = num_items * 15.0;
            break;

Здесь код продолжает спрашивать, сколько новых предметов вы хотите?

        case 2:
            printf("How many old items would you like?\n");
            scanf("%d", &num_items);
            total = num_items * USEDGEAR;
            break;

Здесь код продолжает спрашивать, сколько старых предметов вы хотели бы? случай 3: перерыв;

        default:
            printf("Not a valid option\n");
            break;
        }
    }
    printf("Your total cost is %f\n",total);

    return 0;
}

Оба моих выбора повторяются

Ответы [ 4 ]

2 голосов
/ 24 апреля 2019

Ваша логика цикла имеет недостатки:

  • Вы должны переместить код подсказки внутри цикла.
  • Вы должны обновить total для каждого ответа.
  • Вы должны проверить, успешен ли scanf() при преобразовании ввода пользователя.

Вот измененная версия:

#include <stdio.h>

#define NEWGEAR  15.0
#define USEDGEAR  5.0

int main() {
    int type;
    int num_items;
    double total = 0;

    printf("Welcome to the market\n");
    for (;;) {
        printf("What would you like to do\n");
        printf("\t1-Buy New Gear\n");
        printf("\t2-Buy used gear\n");
        printf("\t3-Quit\n");

        if (scanf("%d", &type) != 1 || type == 3)
            break;

        switch (type) {
        case 1:
            printf("How many new items would you like?\n");
            if (scanf("%d", &num_items) == 1)
                total += num_items * 15.0;
            break;

        case 2:
            printf("How many old items would you like?\n");
            if (scanf("%d", &num_items) == 1)
                total += num_items * USEDGEAR;
            break;

        default:
            printf("Not a valid option\n");
            break;
        }
    }
    printf("Your total cost is %f\n", total);

    return 0;
}
2 голосов
/ 24 апреля 2019

Я думаю, это справится с тем, чего вы хотите достичь.

#include <stdio.h>
#include <stdlib.h>

#define NEWGEAR 15.0
#define USEDGEAR 5.0

int main() {
    int type = 0;
    int num_items;
    float total;

    printf("Welcome to the market\n");
    printf("What would you like to do\n");
    printf("\t1-Buy New Gear\n");
    printf("\t2-Buy used gear\n");
    printf("\t3-Quit\n");

    while (type != 3) {
      printf("Enter an option: ");
      scanf("%d", &type);

      if(type == 3)
        break;

      switch (type) {
        case 1:
            printf("How many new items would you like?\n");
            scanf("%d", &num_items);
            total = num_items * 15.0;
            break;
        case 2:
            printf("How many old items would you like?\n");
            scanf("%d", &num_items);
            total = num_items * USEDGEAR;
            break;
        default:
            printf("Not a valid option\n");
            break;
        }
    }
    printf("Your total cost is %f\n",total);

    return 0;
}

Как правило, после того, как ваш пользователь завершил выполнение дел 1-2 или по умолчанию, ваша программа снова запросит у пользователя вариант, если он захочет выйти или выполнить другую операцию для случая 1 или 2.

2 голосов
/ 24 апреля 2019

Вы никогда не обновите переменную type до 3, поэтому цикл while никогда не завершится.Хотя у вас есть оператор break, он влияет на switch, а не на окружность while.

0 голосов
/ 24 апреля 2019

вы можете попробовать if(type != 3) вместо использования while(type != 3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...