1

我正在尝试制作一个程序来打印数组的名称,该数组代表棋盘的第一行。我的尝试是使用以下程序,但我唯一能实现的是打印数字:(。

    #include <iostream>

     using namespace std;

      void  main()

       enum pions // giving the names in pions 
       { 
       Tower=1 ,
       Horse ,
       Officer ,
       Princes ,
       King };

     int Chess [0][8]={Tower , Horse , officer , Princes , King , Officer , Horse , Tower };    

     // putting the names of each coordinate in the array (above ) .

    cout << " in this place the pion that is placed is the  " << chess [0][1] << endl;

我知道程序会打印数字 2 ,但我怎样才能让它打印单词“Horse”而不是 2 ???

cout 命令是由程序的创建者(我:P)编写的,我如何为用户提供选择要打印的数组部分的选项?

提前感谢您的时间和精力,如果我不清楚,非常抱歉,这是我的第一篇文章:D。

欢迎任何建议。

4

4 回答 4

2

您需要编写一个函数,该函数接受一个类型的参数Chess并返回一个字符串。这是一个可行的方法:

const char *chessPieceName(Chess piece)
{
    switch(piece) {
        case Tower:
            return "Tower";
            break;
        case Horse:
            return "Horse";
            break;
        // etc.
        default:
            return "Not a valid piece";
            break;
    }
}

您可以从以下位置调用然后调用此函数main

cout << " in this place the pion that is placed is the  " << chessPieceName(chess[0][1]) << endl;

话虽如此,您的代码中还有许多其他问题应该阻止它编译。我不会详细介绍它们,因为您似乎只是对您提出的问题感兴趣。

于 2013-11-11T16:23:02.707 回答
1

您可以有一个translator函数来获取该int值并将其转换为可打印的字符串值:

string translate(int piecenum){
    string [5] ref = { "Tower", "Horse", "Officer", "Princes" "King"}
    return ref[piecenum];
}

您可以使用打印出来cout << translate(chess[0][1]) << endl

于 2013-11-11T16:23:38.007 回答
0

您不能打印出枚举的标识符。

您需要创建一个不同的函数,它将您的枚举作为输入参数并返回一个带有您想要的名称的 std::string。例如,如果您通过它pions::Tower,它将返回“Tower”。如果您通过它pions::Horse,它将返回“Horse”。等等。

提示:如godel9 的回答所示switch,在该函数的主体中使用语句。

于 2013-11-11T16:23:00.677 回答
0

要么使用 C# 而不是 C++,要么自己定义一个国际象棋人物名称数组。例如

   enum pions // giving the names in pions 
   { 
   Tower = 0 , // <== I prefer to use 0 instead of 1
   Horse ,
   Officer ,
   Princes ,
   King };


const char *name = { "Tower", "Horse", "Officer", "Princes", "King" };

//...

for ( int i : chess[0] ) std::cout << name[i] << std::endl; 
于 2013-11-11T16:29:20.940 回答