如何在我的代码中正确使用char和void原型?

时间:2014-11-22 00:35:44

标签: c++

我的目标是让用户在程序错误检查输入正确之前选择一个操作数符号,并传递一个消息,询问将询问什么类型的算术问题。我真的不懂使用char和void原型。这是一个赋值,我必须使用这些特定的函数来调用这些特定的函数。

这些是我需要使用的原型:

void PrintMenu ();
char GetMenuChoice ();
void TellUserAboutOp (char i);

这就是我在int main()中所拥有的:

PrintMenu ();
GetMenuChoice();             
TellUserAboutOp (operandChoice);     

到目前为止这是函数的样子:

void PrintMenu ()
{
   cout << "What operation would you like to practice?" << endl 
   << "Please type the character giving your choice after the small arrow: " 
   << endl << "\t + for addition" << endl << "\t - for subtraction" << endl 
   << "\t * for multiplication" << endl << "\t / for division -> ";

}

char GetMenuChoice ()
{
  char chosenOperand;
  cin >> chosenOperand;

  while ((chosenOperand != '+') || (chosenOperand != '-') || 
  (chosenOperand != '*') || (chosenOperand != '/'));
  {
    cout << "That's not a valid character for your choice. Please try again!" 
    << endl << "Type in the character of your choice -> ";
    cin >> chosenOperand;

  }


return (chosenOperand);

}

void TellUserAboutOp (char i)
{

  if
      (i == '+')
      cout << "OK, let's try 7 different questions to practice addition.";

  else if
      (i == '-')
      cout << "OK, let's try 7 different questions to practice subtraction.";

  else if
      (i == '*')
      cout << "OK, let's try 7 different questions to practice multiplication.";

  else if
      (i == '/')
      cout << "OK, le's try 7 different questions to practice division.";

  return;

}

编译警告是:

48): warning C4700: uninitialized local variable 'operandChoice' used

3 个答案:

答案 0 :(得分:0)

当你调用GetMenuChoice时,它会返回一个char,你要将其存储在operandChoice中。返回非void类型的函数可以像该类型的变量一样使用。所以:

char operandChoice = GetMenuChoice();

将根据您的需要编译并清除未初始化的变量警告。我确定你的任务是理解函数如何返回可以在赋值和其他类似表达式中使用的值。

答案 1 :(得分:0)

您不会显示main的完整代码,但似乎您已经定义了一个本地变量operandChoice,在您使用它之前没有给出任何有用的值。你可能想要像

这样的一行
operandChoice = GetMenuChoice();
在你主要的某个地方。根据其原型,GetMenuChoice 返回一个char,这意味着您可以将函数的结果分配给char变量。您还可以通过编写

在声明它的位置初始化operandChoice
char operandChoice = GetMenuChoice();

该函数的原型告诉您它的签名。第一件事(在函数名之前)是返回类型。 void是一种特殊的返回类型,表示该函数实际上没有返回任何内容。所以你对其他功能的使用是正确的。执行FunctionName(some arguments)只执行该功能。 可以使用返回char(或其他东西)的函数执行相同的操作,但它会丢弃函数返回的结果。

其他提示:我认为while中的GetMenuChoice条件存在问题。 chosenOperand变量只能等于其中一个操作数字符。因此,至少有三个比较总是会产生真值,因此您永远不会退出while循环。您可能希望以不同于||的方式组合每个运算符的检查(这意味着&#34;或&#34;)。

此外,在你的while循环之后有一个;。这将只创建一个无限的while循环,因为{}所包含的后续块将不会被视为循环的主体。由于;,while循环有一个空体。

答案 2 :(得分:0)

固定代码,完成任务。

更改了GetMenuChoice();在int main()中:

char operandChoice = GetMenuChoice();

在函数中修复while循环:

void PrintMenu ()
{
     cout << "What operation would you like to practice?" << endl 
     << "Please type the character giving your choice after the small arrow: " 
     << endl << "\t + for addition" << endl << "\t - for subtraction" << endl 
     << "\t * for multiplication" << endl << "\t / for division -> ";

}

char GetMenuChoice ()
{
    char chosenOperand;
    cin >> chosenOperand;

    while
        ((chosenOperand != '+') && (chosenOperand != '-') 
        && (chosenOperand != '*') && (chosenOperand != '/'))
    {

    cout << "That's not a valid character for your choice. Please try again!" << endl 
    << "Type in the character of your choice -> ";
    cin >> chosenOperand;

    }

    return (chosenOperand);

}

void TellUserAboutOp (char i)
{

    if
        (i == '+')
        cout << "OK, let's try 7 different questions to practice addition." << endl;

    else if
        (i == '-')
        cout << "OK, let's try 7 different questions to practice subtraction." << endl;

    else if
        (i == '*')
        cout << "OK, let's try 7 different questions to practice multiplication." << endl;

    else if
        (i == '/')
        cout << "OK, le's try 7 different questions to practice division." << endl;

    return;

}