Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想我试图在变量中传递错误的数据?新手程序员里面 我开始学习C++的基础知识,我想编写一些代码来实践我所学的东西。我想创建一个类和一些函数。它应该是一个标题屏幕来开始一个文字游戏,除了没有游戏…还没有:P_C++ - Fatal编程技术网

我想我试图在变量中传递错误的数据?新手程序员里面 我开始学习C++的基础知识,我想编写一些代码来实践我所学的东西。我想创建一个类和一些函数。它应该是一个标题屏幕来开始一个文字游戏,除了没有游戏…还没有:P

我想我试图在变量中传递错误的数据?新手程序员里面 我开始学习C++的基础知识,我想编写一些代码来实践我所学的东西。我想创建一个类和一些函数。它应该是一个标题屏幕来开始一个文字游戏,除了没有游戏…还没有:P,c++,C++,每当我输入1开始,它显示良好的工作,它只是不做什么后,我点击进入 在正确的方向上的任何一点都是很好的。我一直在看关于函数的视频和阅读教程,它似乎没有涵盖我遇到的问题 #include <iostream> #include <string> using namespace std; //Function Protos void keyError(); int userInput(int x); //class library class Title { b

每当我输入1开始,它显示良好的工作,它只是不做什么后,我点击进入

在正确的方向上的任何一点都是很好的。我一直在看关于函数的视频和阅读教程,它似乎没有涵盖我遇到的问题

#include <iostream>
#include <string>


using namespace std;

//Function Protos
void keyError();
int userInput(int x);

//class library
class Title
{
    bool nSelect;
    int x;
public:
    void titleScreen()
    {
        while(nSelect)
        {
            cout << "Welcome to Biggs RPG!" << endl << "1. Play 2. Exit" << endl;
            userInput(x);
                if (userInput(1))
                    nSelect = 0;
                else if (userInput(2))
                {
                    cout << "Closing program..." <<endl;
                    nSelect = 0;
                }
                else
                    keyError();
         }
    }
};

int main()
{
Title displayTitle;
displayTitle.titleScreen();

cout << "Good work";
return 0;
}

void keyError()
{
cout << "Meow? Wrong input try again." << endl;
}   

int userInput(int x)
{
x = 0;
cin >> x;
return x;
}

您应该将userInput的返回值与1或2进行比较,如下所示:

int userInput(void);

//class library
class Title
{
    bool nSelect;
    int x;
public:
    void titleScreen()
    {
        nSelect = true;
        while(nSelect)
        {
            cout << "Welcome to Biggs RPG!" << endl << "1. Play 2. Exit" << endl;
            x = userInput();
            if (x == 1)
                nSelect = false;
            else if (x == 2)
            {
                cout << "Closing program..." <<endl;
                nSelect = false;
            }
            else
                keyError();
         }
    }
};

您应该将userInput的返回值与1或2进行比较,如下所示:

int userInput(void);

//class library
class Title
{
    bool nSelect;
    int x;
public:
    void titleScreen()
    {
        nSelect = true;
        while(nSelect)
        {
            cout << "Welcome to Biggs RPG!" << endl << "1. Play 2. Exit" << endl;
            x = userInput();
            if (x == 1)
                nSelect = false;
            else if (x == 2)
            {
                cout << "Closing program..." <<endl;
                nSelect = false;
            }
            else
                keyError();
         }
    }
};

有许多风格和技术问题。尝试从中推荐的资源中学习

这是一个开始

#include <iostream>
#include <string>

// "using namespace std;" is poor practice. Better to write out std::

/*  Unless you will have two title screens at the same time,
    this should probably be a namespace, not a "singleton" class. */
namespace Title
{
    int nSelect;

    void titleScreen()
    {
        do {
            // prompt for input
            std::cout << "Welcome to Biggs RPG!\n" "1. Play 2. Exit\n";

            // get ready to accept input, even if there was an error before
            if ( ! std::cin ) {
                std::cin.clear(); // tell iostream we're recovering from an error
                std::cin.ignore( 1000, '\n' ); // ignore error-causing input
            }
            // repeat if invalid input
         } while( ! std::cin >> nSelect || ! handleInput( nSelect ) );
不同之处在于,您希望请求输入,然后处理它。您发布的代码每次检查输入内容时都会再次请求输入


这是一个do…while循环,因此它至少执行一次,然后重复,只要最后的条件为true。如果用户提供的输入无效,则!std::cin的计算结果为true。然后C++的策略是停止返回任何输入,直到调用STD::C.CULL,这表明您将再次尝试。忽略然后清除无效输入。然后nSelect尝试读取一个数字,如果该操作成功,则调用handleInput,您必须写入该输入,如果输入无效,则返回false。因此,如果读取一个数字失败,或者输入了错误的数字,循环将再次进行。

存在许多风格和技术问题。尝试从中推荐的资源中学习

这是一个开始

#include <iostream>
#include <string>

// "using namespace std;" is poor practice. Better to write out std::

/*  Unless you will have two title screens at the same time,
    this should probably be a namespace, not a "singleton" class. */
namespace Title
{
    int nSelect;

    void titleScreen()
    {
        do {
            // prompt for input
            std::cout << "Welcome to Biggs RPG!\n" "1. Play 2. Exit\n";

            // get ready to accept input, even if there was an error before
            if ( ! std::cin ) {
                std::cin.clear(); // tell iostream we're recovering from an error
                std::cin.ignore( 1000, '\n' ); // ignore error-causing input
            }
            // repeat if invalid input
         } while( ! std::cin >> nSelect || ! handleInput( nSelect ) );
不同之处在于,您希望请求输入,然后处理它。您发布的代码每次检查输入内容时都会再次请求输入


这是一个do…while循环,因此它至少执行一次,然后重复,只要最后的条件为true。如果用户提供的输入无效,则!std::cin的计算结果为true。然后C++的策略是停止返回任何输入,直到调用STD::C.CULL,这表明您将再次尝试。忽略然后清除无效输入。然后nSelect尝试读取一个数字,如果该操作成功,则调用handleInput,您必须写入该输入,如果输入无效,则返回false。因此,如果读取一个数字失败,或者输入了错误的数字,循环将再次进行。

我感觉到对参数和返回值之间差异的混淆。当您将函数定义为

int userInput(int x) {
  ...
将一个值传递给函数x,并使用return语句返回一个值。在您的情况下,不需要向函数传递参数;您需要返回一个值。您可以通过将该值分配给另一个变量来访问该值:

theResult = userInput(123);
但传递给函数的值并不重要;你不妨使用

int userInput(void) {
  ...
在这种情况下,您可以使用

theResult = userInput();
现在让您感到困惑的是,可以将变量的地址作为参数传递给函数。您可以使用它访问数据(通常是较大的数据块,如数组或结构),但也可以使用它提供存储返回值的位置。因此

void squareMe(int *x){
    *x*=*x;
}
将返回指向该位置的数字的平方。然后你就可以做了

int x=4;
squareMe(&x);
cout << x;
将打印出16!。这是因为函数查看地址的内容&x是变量x的地址,并就地将其自身相乘


我希望这个解释能有所帮助。

我感到对参数和返回值之间的差异感到困惑。当您将函数定义为

int userInput(int x) {
  ...
将一个值传递给函数x,并使用return语句返回一个值。在您的情况下,不需要向函数传递参数;您需要返回一个值。您可以通过将该值分配给另一个变量来访问该值:

theResult = userInput(123);
但传递给函数的值并不重要;你不妨使用

int userInput(void) {
  ...
在这种情况下,您可以使用

theResult = userInput();
现在让您感到困惑的是,可以将变量的地址作为参数传递给函数。您可以使用它访问数据(通常是较大的数据块,如数组或结构),但也可以使用它提供存储返回值的位置。因此

void squareMe(int *x){
    *x*=*x;
}
将返回指向该位置的数字的平方。然后你就可以做了

int x=4;
squareMe(&x);
cout << x;
将打印出16!。这是因为函数查看地址的内容&x是变量x的地址,并就地将其自身相乘


我希望这个解释能有所帮助。

我想你对userInput的期望是如果userInput==1,我想你对userInput的期望是如果userInput==1。看起来我需要再学习一点。这是我第一次尝试创建一个我以后可以使用或修改的东西。你要买什么

上面的斯特德有点超过我的头了>@user2442335你头上是什么部位?我可以澄清一些事情。这段代码只是对输入循环提示符的重写。我还没有看过名称空间,我简单地听过singleton,但我没有了解上下文的范围。我认为这是一个过于先进的概念,由于缺乏经验,我无法想象它。'std::cin.clear;}虽然std::cin>>选择| |!handleInput-nSelect;'这是我真正没有得到的。我知道while循环是什么:PXD@user2442335好的,我加了更多。你可以通过查看获得关于std::中任何你在答案中看到的信息。好的,看起来我需要进一步研究。这是我第一次尝试创建一个我以后可以使用或修改的东西。你在上面发布的内容有点超出了我的理解力>@user2442335你的理解力是什么?我可以澄清一些事情。这段代码只是对输入循环提示符的重写。我还没有看过名称空间,我简单地听过singleton,但我没有了解上下文的范围。我认为这是一个过于先进的概念,由于缺乏经验,我无法想象它。'std::cin.clear;}虽然std::cin>>选择| |!handleInput-nSelect;'这是我真正没有得到的。我知道while循环是什么:PXD@user2442335好的,我加了更多。您可以查看以获取有关std::中的任何内容的信息,您可以在答案中看到这些信息。当我尝试这样做时,它给了我这些信息。错误C2660:“userInput”:函数不接受0参数ID您还修改了程序开头的userInput声明?int userInputvoid;声明和定义应始终使用相同类型的参数。它已编译,但仍存在逻辑错误。它仍然拿着这个号码,什么也不做。非常感谢,我没有在函数中得到void部分,或者知道我可以用函数声明一个变量。@user2442335我刚刚注意到nSelect被定义为bool类型,但被赋值为0。这是一个糟糕的样式,它应该被指定为true或false。而且,由于您没有提供显式构造函数,所以nSelect将被初始化为false。当我这样尝试时,它给出了这个结果。错误C2660:“userInput”:函数不接受0参数ID您还修改了程序开头的userInput声明?int userInputvoid;声明和定义应始终使用相同类型的参数。它已编译,但仍存在逻辑错误。它仍然拿着这个号码,什么也不做。非常感谢,我没有在函数中得到void部分,或者知道我可以用函数声明一个变量。@user2442335我刚刚注意到nSelect被定义为bool类型,但被赋值为0。这是一个糟糕的样式,它应该被指定为true或false。而且,由于没有提供显式构造函数,nSelect将被初始化为false。似乎将其更改为void仍然存在1或2不被接受的问题。我从来不知道标题屏幕将是如此困难的第一个任务!似乎将其更改为空白仍然存在1或2不被接受的问题。我从来不知道标题屏幕将是如此困难的第一个任务!