【问题标题】:c++ enum characher from integer value来自整数值的 c++ 枚举字符
【发布时间】:2021-12-08 07:41:18
【问题描述】:

所以我的问题是这样的,我必须输入一个从 1 到 7 的数字,并且对于每个相应的数字,我必须打印一个英文单词的字母(e 代表 1,n 代表 2,等等) 这是我的想法:

#include <iostream>
using namespace std;
int main()
{
    enum eng {e='e', n='n',g,l,i,s,h} 
    };
    int x;
    cout << "dati x\n"; 
    cin >> x;
    if (x >= 0 && x <= 7)
        eng val = static_cast<eng>(x);
        cout << x;

    
}

我希望将数字 ( x ) 从 eng 类型转换为其相应的字母,但转换会返回数字(如果我输入 1,它给我 1,如果我输入 2,它给我 2) 我尝试在 eng 中为 e 和 n 分配一个 char 值,看看会发生什么,但结果相同,我知道我可以使用 switch,但我想尝试让它工作

【问题讨论】:

  • 看来你想要一个 map 来将数字映射到字符而不是枚举。
  • 我还建议您使用编辑器重新格式化工具,因为您显示的代码没有按照缩进的建议进行。
  • 为什么不只是const char* eng = "english";...cout &lt;&lt; eng[x];
  • 测试x &gt;=0 &amp;&amp; x &lt;=7 有一个错误。如果您的范围是 1-7,则使用 x &gt;= 1 &amp;&amp; x &lt;= 7。如果您的范围是 0-6,那么您使用 x &gt;= 0 &amp;&amp; x &lt; 7。 Alan 的上述示例假设您使用的是 0-6。但是,它对 0-7 有效,因为字符串包含 NUL 终止符..
  • 仔细查看您正在打印的内容。

标签: c++ enums casting


【解决方案1】:

讨论枚举有点超出了问题的范围,因为枚举在这里只是错误的工具。单词"english" 中的字母值不连续,命名为常量的枚举的名称不容易访问,因此枚举无助于将索引映射到字符。

将索引映射到字符的工具是std::string

 std::string english{"english"};
 if (x >= 1 && x < 8) std::cout << english[x-1];

你的界限是错误的。 "english" 只有 7 个字符,而您的条件允许 8 个不同的索引。因为数组索引是基于零的,但任务要求您使用基于 1 的索引,所以您需要减去 1 才能获得所需的字符。此外,它是一种风格问题,但通常使用半开区间(即[1,8),包括下限,不包括上限)。

【讨论】:

    【解决方案2】:

    您拥有的枚举没有值 0、1、...,因为您设置了 'e' 和 'n'。这些是字符,int 值分别为 101 和 110。 'n' 之后的所有枚举值将从 110 开始递增 1。如前所述,您想要的是某种 const 数组(std::arraychar[]std::vectorstd::string(如前所述波纹管))在其中将字符'e','n',...添加到此数组中。然后,您可以使用 myArray[0-6] 来获取相应的字符。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      相关资源
      最近更新 更多