使用类、私有、公共、构造函数、函数、整数和字符串对进一步学习进行编程

Program furthering learning using Classes, private, public, constructor, functions, integers, and strings

本文关键字:进一步 字符串 学习 编程 整数 私有 公共 函数 构造函数      更新时间:2023-10-16

在我的 c++ 类中,我们的任务是不断在此代码中构建不同的方面。我目前收到 2 个错误,并且被困在我不知道我做错了什么的地方。该程序将私家车或字符串作为名称和私人整数输入到游戏中,检查是否可以被 3、5 和 3 和 5 整除。我将在类中使用 get 函数和 put 函数来获取输入值并输出它们。我基本上已经弄清楚了该程序,但它不会编译,我真的不确定为什么。这是我的代码:

#include <iostream>
#include <iomanip>
using namespace std;
using std::istream;
// declare the max size the username input can be
const int MAX = 14;
enum FIZZBUZZ { ABORT = 0, FIZZBUZZ, FIZZ, BUZZ };

class CFizzbuzz                              // Class definition at global scope
{
    // make sure our constructor, destructor, plus member functions are
    // all public and available from outside of the class.
public:
    CFizzbuzz() {}              // Default constructor definition
    ~CFizzbuzz() {}             // Default destructor definition

                                // function members that are public
                                // get the user's name and their value from the console and
                                // store those results into the member variables.
    void getFizzbuzz()
    {
        cout << "Please enter your name: " << endl;
        cin >> m_myName;
        cout << "Please enter your number for the FizzBuzz game: " << endl;
        cin >> m_myNum;
    }
    // return the user's number type entered
    int putFizzBuzz()
    {
        return m_myNum;
    }
    char* getName()
    {
        return m_myName;
    }
    // logic to check to see if the user's number is 0, fizz, buzz, or     fizzbuz
    int getRecord(int num)
    {
        if (num == 0)
        {
            return ABORT;
        }
        else if (num % 5 == 0 && num % 3 == 0)  // fizzbuzz number
        {
            return FIZZBUZZ;
        }
        else if (num % 5 == 0)  // buzz number
        {
            return BUZZ;
        }
        else if (num % 3 == 0)  // fizz number
        {
            return FIZZ;
        }
        else
            return num;
    }
    // private data members only available inside the class
private:
    int     m_myNum;
    char    m_myName[MAX];
};

int main()
{
    CFizzbuzz   myClass;

    cout << "Welcome to my Fizzbuzz game, you are to guess the location of a "
        << "number which if is divisible by 5 and 3 you will win with "
        << "the output of Fizzbuzz. " << endl;
    cout << "Please enter an integer value between 0 and 3 "
        << "representing the row location of the number for the game, "
        << "then press the Enter key: " << endl;
    for (;;)
    {
        myClass.getFizzbuzz();
        int num = myClass.putFizzBuzz();
        switch (myClass.getRecord(num))
        {
        case ABORT:
            cout << myClass.getName() << "nThank you for playingn";
            system("PAUSE");
            return 0;   // exit program
        case FIZZ:
            cout << "Sorry, " << myClass.getName() << ", number is a Fizz, please try again.n";
            break;
        case BUZZ:
            cout << "Sorry, " << myClass.getName() << ", number is a Buzz,    please try again.n";
            break;
        case FIZZBUZZ:
            cout << "You win you got FizzBuzz!!!" << endl;
            break;
        default:
            cout << "Sorry, " << myClass.getName() << ", number is a not a Fizz, Buzz, or FizzbuzznPlease try again.n";
            break;
        }
    }
}

这些是我遇到的错误:

LNK2019, LNK1120

根据您在注释(Unresolved external symbol _WinMain@16(中提到的错误,我会说您在Visual Studio中创建了一个Win32项目(GUI项目(,但您的代码旨在成为控制台应用程序。

您需要将项目

类型从 Win32 应用程序更改为控制台应用程序,方法是重新创建项目或在项目设置中将子系统从 Windows 更改为控制台。有关后者的更多信息,请参阅以下链接:

https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx

我会怀疑 else 返回 num。 输入 1 或 2 时会发生什么? 显然,模数不提供嘶嘶声或嗡嗡声,但根据您的枚举值,函数 getRecord(( 返回它确实如此。 我会将 NONE 枚举值设置为 -1,以指示它既不是嘶嘶声也不是嗡嗡声。

关于枚举值要记住的是,它在编译时解析为实际数字。 因此,当您输入 1 并且模数没有证明嘶嘶声、嗡嗡声或嘶嘶声并且返回 1 时,switch case 语句将解析为嘶嘶声,即使情况并非如此(双关语(。

至于您评论它没有按预期工作,请输入更多详细信息。