Беда с функциями, возвращающими bool! - PullRequest
0 голосов
/ 29 мая 2010

Я не совсем понимаю, как использовать функцию, которая возвращает логическое значение. Я знаю, что это такое, но я не могу понять, как заставить это работать в моей программе. Я пытаюсь сказать, что если моя переменная «selection» - это любая буква между «A» и «I», то она действительна и может перейти к следующей функции, которая называется calcExchangeAmt(amtExchanged, selection). Если это неверно, я хочу спросить пользователя, хотят ли они повторить программу и согласны ли они повторить. Я хочу, чтобы он очистил экран и перезапустил основную функцию. Как мне заставить мою программу работать как задумано?

Это моя функция bool:

bool isSelectionValid(char selection, char yesNo, double amtExchanged)
{
    bool validData;

    validData = true;

    if ((selection >= 'a' && selection <= 'i') || 
        (selection >= 'A' && selection <= 'I'))
    {
        validData = calcExchangeAmt (amtExchanged, selection);
    }
    else(validData == false);
    {
        cout << "Do you wish to continue?  (Y for Yes / N for No)";
        cin >> yesNo;
    }

    do
    {
        main();
    }

    while ((yesNo =='y')||(yesNo == 'Y'));
    {
        system("cls");
    }
    return 0;
}

Я получаю это предупреждение:

предупреждение C4800: «double»: принудительное значение bool «true» или «false» (предупреждение о производительности)

Ответы [ 3 ]

1 голос
/ 29 мая 2010

Функция bool должна возвращать true или false. Я предполагаю, что ваше предупреждение вызвано тем, что вы объявляете validData как bool, но затем присваиваете ему другое значение (возвращаемое функцией calcExchangeAmt). Это значение преобразуется из его типа значения (double) в логическое значение (true или false).

Итак, ваш метод IsSelectionValid должен просто возвращать true, если выбор допустим, или false, если это не так. Тогда любой код должен знать, что информация может поступать соответственно.

Я не знаю много C ++, так что простите меня за проблемы синтаксиса, которые мой код должен иметь, но ваш код должен выглядеть примерно так:

bool isSelectionValid(char selection)
{
  return (selection >= 'a' && selection <= 'i') || (selection >= 'A' && selection <= 'I');
}

void myCallingFunction(double amtExchanged, char selection)
{
   bool isSelectionValid = isSelectionValid(selection);

   if(isSelectionValid)
  {
     double exchangeAmt = calcExchangeAmt (amtExchanged, selection);
  }
  else 
  {
     cout<<"Do you wish to continue?  (Y for Yes / N for No)";
     cin>>yesNo;

     if((yesNo =='y')||(yesNo == 'Y'))
     {
        main(); // or whatever code starts another attempt
     }
}
0 голосов
/ 30 мая 2010

Этот код серьезно сбивает с толку и очень не похож на C ++. Обычно мы ожидаем, что main () будет функцией, которая управляет вещами и вызывает другие функции, а не вызывать ее из какого-то другого места. Мы обычно избегаем do, если нет веских причин (а я здесь не вижу). Я думаю, что маловероятно, что функция с именем calcExchangeAmt вернет true или false; Я подозреваю, что на самом деле он возвращает число, с которым вы должны делать что-то еще (показывая пользователю?).

При всём этом попытка объяснить ваши настоящие сообщения об ошибках компилятора имеет ограниченную ценность. Ваш код весь наизнанку и обратно. Ответ Анны Лир кажется лучшей отправной точкой, если он имеет смысл для вас.

0 голосов
/ 29 мая 2010

Тип 0 не bool; истина или ложь bool. Он говорит вам, что 0 является двойным, но заставляет его использовать логический тип.

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