Как мне остановить повторение цикла после того, как пользователь ввел правильные буквы?

#c

#c

Вопрос:

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

int main()

{
  char code, name[50];

  int bal_paid, balance, bal_rem, tennis = 0, swimming = 0, Badminton = 0;

  printf("T for Tennisn");
  printf(" B for Badmintonn");
  printf(" S for Swimmingn");
  printf("please enter your name:");

  scanf("%s", name);

  do {
    printf("nPlease enter the amount you paid for the feesn");

    scanf("%d", amp;bal_paid);

    printf("Please select a code : n");

    scanf("%c", amp;code);

    scanf("%c", amp;code);

    if (code == 'T' || code == 't')
    {
      balance = 18000;

      bal_rem = balance - bal_paid;

      tennis = tennis   1;

      printf("Hello %s your sport event is tennis. Your balance remaining is $%d", name, bal_rem);
    }
    else if (code == 'B' || code == 'b')
    {
      balance = 14000;

      bal_rem = balance - bal_paid;

      Badminton = Badminton   1;

      printf("Hello %s your sport event is Badminton. Your balance remaining is $%d", name, bal_rem);
    }
    else if (code == 'S' || code == 's')
    {
      balance = 16000;

      bal_rem = balance - bal_paid;

      swimming = swimming   1;

      printf("Hello %sc your sport event is swimming. Your balance remaining  is $%d", name, bal_rem);
    }
    else if (code != 'T' || code != 't' || code != 'B' || code != 'b' || code != 'S' || code != 's')
    {

      printf("invalid code");
    }
  } while (code != 'T' || code != 't' || code != 'B' || code != 'b' || code != 'S' || code != 's');

  printf("the amount of people doing tennis is %dn", tennis);

  printf("the amount of people doing tennis is %dn", Badminton);

  printf("the amount of people doing tennis is %dn", swimming);

  return 0;
}
  

Комментарии:

1. Редактор включает в себя инструменты редактирования и форматирования. Символ для правильно отформатированного исходного кода — это символ. (т. Е. Он не будет правильно форматировать ваш код, но сделает правильно отформатированный и отформатированный код похожим на правильно отформатированный и отформатированный код.) {...}

2. Ваш тест code != 'T' || code != 't' ... неверен. Кода либо не будет T , либо не будет t , например, так что это всегда будет верно, следовательно, бесконечный цикл. Это не может быть одновременно T и t одновременно. Измените логическое или на логическое и .

3. Я обновил сообщение, чтобы сделать код, по крайней мере, помеченным как код. Но он по-прежнему едва читаем из-за непоследовательных отступов и чрезмерного использования ненужных пустых строк. Пожалуйста, отредактируйте дальше, чтобы сделать код читаемым.

4. @kaylum добавил некоторые улучшения с помощью онлайн-форматера C.

Ответ №1:

Измените этот тест:

 while (code != 'T' || code != 't' || code != 'B' || code != 'b' ...)
  

к этому:

 while (code != 'T' amp;amp; code != 't' amp;amp; code != 'B' amp;amp; code != 'b' ...)
  

Первое всегда будет давать значение true , независимо от значения code .