C ++文件输入/输出输出数字而不是字符

时间:2016-05-30 00:25:31

标签: c++ arrays random

我创建了一个程序,使用文件输入/输出随机地将角色(作业)分配给某个房子的成员。它构建成功,但是当使用cout并且我实际看到结果时,我可以看到为什么程序是不工作。

以下是我认为有问题的代码片段:

  std::string foo = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences";
  cout << foo << endl;

这里是成员[random]数组,它从这个数组中随机选择成员并查看它们的可用时间并根据它们的Preference输入文件为它们分配作业。

unsigned const char members[22] = 
{   'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v'  };

我创建了一个随机数字选择器,它经历了0-21并将它创建的值分配给变量random。因此,从本质上讲,它是成员[随机]并且完全随机。

这是我在终端中输出的输出。

Preferences/116-Preferences

但是我将输出设置为Preferences / member [random] -Preferences。 它正在访问一个数字,而不是我的数组字符。

我创建了一个cout&lt;&lt;成员[随机];在它下面,每次我运行程序,我得到

  Preferences/107-Preferences   <---- A random number every time

  k                   <---- random letter every time.

所以我知道它必须访问我的随机函数,但是将它分配给数字!我如何解决这个问题,以便正确输出:

 Preferences/t-Preferences

请帮助我,谢谢!

2 个答案:

答案 0 :(得分:3)

  

&#34;你越是疏忽管道,就越容易停下来   排水&#34; - Scotty,Star Trek III

声明membersunsigned char s并没有完成任何有用的事情。一个简单的char就足够了。 std::string已经实现了一个带有+参数的重载char运算符,因此它比您想象的要容易得多:

const char members[22] = {
   'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v'  };

// ...

std::string foo = std::string("Preferences/") + members[random]
                  + "-Preferences";

答案 1 :(得分:1)

没有::std::to_string(char),只有(不太接近)::std::to_string(int)。所以你的角色实际上被转换为它的数字表示,你会得到你不想要的结果。

尝试改为

std::string foo("Preferences/");
foo = foo.append(1, members[random]).append("-Preferences");

使用字符串流的变体:

ostringstream oss;
oss << "Preferences/" << members[random] << "-Preferences";
// get your string via:
oss.str();