函数返回bool的麻烦!

时间:2010-05-29 04:49:31

标签: visual-c++

我不明白如何使用返回布尔值的函数。我知道它是什么,但我无法弄清楚如何让它在我的程序中运行。我试图说,如果我的变量“选择”是“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 个答案:

答案 0 :(得分:1)

bool函数应该返回true或false。我猜你的警告是由于你将validData声明为bool,然后给它分配了一个不同的值(由calcExchangeAmt函数返回)。该值将从其值类型(double)转换为boolean(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
     }
}

答案 1 :(得分:0)

这段代码非常令人困惑,非常像非C ++。我们通常期望main()是驱动事物并调用其他函数的函数,而不是从其他地方调用它。除非有令人信服的理由(我在这里没有看到),否则我们通常会避免do。我认为名为calcExchangeAmt的函数返回true或false的可能性极小;我怀疑它实际上会返回一个你应该做其他事情的数字(显示给用户?)。

随着这一切的进行,尝试解释实际的编译器错误消息的价值有限。你的代码全都是内外的。如果对你有意义,Anna Lear的回答似乎是一个更好的起点。

答案 2 :(得分:-2)

0的类型不是bool;是{false}是bool。它告诉你0是双精度,但它强制它为布尔类型。