Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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++ C++;文件输入/输出输出数字而不是字符_C++_Arrays_Random - Fatal编程技术网

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

C++ C++;文件输入/输出输出数字而不是字符,c++,arrays,random,C++,Arrays,Random,我创建了一个程序,可以使用文件输入/输出将角色(作业)随机分配给某个家庭的成员。。它构建成功,但当使用cout时,我实际看到了结果,我可以理解为什么程序不起作用 以下是我认为有问题的代码片段: std::string foo = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences"; cout << foo << endl; 我创建了一个随机数选择器,它通过0

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

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

  std::string foo = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences";
  cout << foo << endl;
我创建了一个随机数选择器,它通过0-21,并将它创建的值赋给变量random。因此,本质上,它是成员[随机]和完全随机的

这是我在终端中得到的输出

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

我创建了一个cout “你越是过度考虑管道,就越容易堵塞 排水管”-斯科特,星际迷航III

成员
声明为
无符号字符
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";

没有
::std::to_string(char)
,只有(不太接近的)
::std::to_string(int)
。因此,您的角色实际上被转换为其数字表示形式,您会得到不想要的结果

试试看

std::stringfoo(“Preferences/”);
foo=foo.append(1,成员[random]).append(“-Preferences”);
使用字符串流的变量:

ostringstream操作系统;

oss
std::to_string
不接受字符作为输入。只需将字符添加到字符串中。不过我需要一个随机输出。我需要它来访问成员[随机]。是否有std::to_char?编译时没有任何问题。任何错误都必须是由于您的问题中未包含的代码造成的。@SamVarshavchik operator+():找到我了,比
append
+1谢谢你!它能工作,但不能。当你的字符工作时,每一次它都会输出一个不完全正确的字符。例如,有时我会得到一个奇怪的y和一个波浪线,而不是Preferences/y-Preferences中的正常y。或带水平冒号的O。或者上面有一条线的u。救命啊!这些奇怪的角色只发生了几次,然后我编辑了一些代码,比如couts和其他,它们似乎停止了。谢谢你的帮助,坚持下去!奇怪。。。似乎有一些编码问题。但是,由于您的成员都是ascii字符,所以它们应该是好的,即使您的文件是用utf8、拉丁语-1(iso 8859-1)、windows cp或大多数(但不是所有)其他语言编码的(在这个域中,无论使用字符还是无符号字符-尽管Sam V.是正确的,但只要
char
就足够了…)
  Preferences/107-Preferences   <---- A random number every time

  k                   <---- random letter every time.
 Preferences/t-Preferences
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";