【问题标题】:Functions [newbie]功能 [新手]
【发布时间】:2018-02-07 12:57:50
【问题描述】:

我是 Functions 的新手,我试图列出 3 个选项。如果我输入“1”,将打印选项 1。我不知道该怎么做就是打印结果。

#include <iostream>
using namespace std;

int Menu(int a)
{
    cout << "Choose an option: " << endl;
    cout << "1.Option 1" << endl;
    cout << "2.Option 2" << endl;
    cout << "3.Option 3" << endl;
    cin >> a;
    return a;
}

char printResult()
{
    char op;

    if (op == '1')
        cout << "OPTION 1";
    if (op == '2')
        cout << "OPTION 2";
    if (op == '3')
        cout << "OPTION 3";
    }

int main()
{   
    char op;
    int a;
    Menu(a);
    printResult();
}

【问题讨论】:

  • 你似乎知道std::cout。用它来打印结果怎么样?
  • 您永远不会在您的任何函数中分配给op。还要记住,函数引入了一个新的作用域,不同作用域的变量是不同的变量,即使它们具有相同的名称。换言之,main 函数中的变量opprintResult 函数中的op 是不同的变量。数字和字符之间也有区别。字符'1' 与数字1 不同。我推荐你get a couple of good beginners books 和他们一起从头开始。
  • 您必须将Menu 的结果作为参数传递给printResult 并检查它而不是您本地的char op;
  • 也许 printResult 可以将 op 作为参数。也许您可以删除 Menu 中那个无用的论点(或将其作为参考,但我个人认为以这种方式“输出”是不好的风格)
  • 我个人不会让 Menu 成为一个函数。将这部分代码外包到函数中会降低代码的可读性。

标签: c++ list function


【解决方案1】:

您需要将值从放入 int 的位置传递到处理/输出的位置:

char Menu()
{
char a;
cout << "Choose an option: " << endl;
cout << "1.Option 1" << endl;
cout << "2.Option 2" << endl;
cout << "3.Option 3" << endl;
cin >> a;
return a;
}

void printResult(char op)
{

if (op == '1')
    cout << "OPTION 1";
if (op == '2')
    cout << "OPTION 2";
if (op == '3')
    cout << "OPTION 3";
}


int main()
{   
    char op = Menu();
    printResult(op);
}

请注意,void printResult(char op) { ... 等函数参数与void printResult() { char op; ... 等局部变量不同。前者消耗一个需要由函数调用者传递的值,例如printResult('1')printResult(someVariable)。后者不接受任何参数,而是使用“局部”变量,该变量仅在函数体范围内可见且有效 - 因此无法将值从外部传输到内部,反之亦然。

【讨论】:

  • 为什么 Menu(char a) 错误而 printResult(op) 正确?我无法理解这一点。我已经 2 天进入 C++,如果我问愚蠢的问题,对不起..
  • 如果我把 op 像这样 printResult(int op) 或 printResult(){int op;}
  • 前者不也使用局部变量吗?
【解决方案2】:

菜单有返回值和参数,但实际上你只需要返回值。

int Menu()

printResult 不需要返回任何东西,但需要告诉它的值是什么,所以传入它

void printResult(int a)
{
    if (op == 1)
        cout << "OPTION 1";
    if (op == 2)
        cout << "OPTION 2";
    if (op == 3)
        cout << "OPTION 3";
}

那么main可以简化一点。

int main()
{   
    int a = Menu();
    printResult(a);

    return 0;
}

我添加了“return 0;”因为 main 被声明为返回一个 int 并且你会得到一个警告。

【讨论】:

  • Re: return: 0; 大多数现代编译器不再需要这个,因为它是隐式的。
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多