[英]Reading a 2D char array from file in C++
首先,我对C ++的知识非常有限,这是我的第一堂课,因此,这看起来可能很愚蠢,但请耐心等待,我想请您将其保持简单或预先解释好。
确定的目标是我想使用内部规则创建此文件,以便可以在单独的函数中读取它。 但是,当我运行此程序时,我没有出现任何错误,但首先出现的结果是完全没有空格,最后我得到了一些随机的ascii。
这是运行代码Welcometothetypinggame1.Typeinentilineinoneline2.Istimedand将影响分数Ø-™wîú{Dx&a¼Ë'©ÉaDx&a®pa的结果
#include <cstdlib>
#include <fstream>
#include <iostream>
int main(int argc, char** argv) {
//set the sentences i want the file to print
char o[3][40]={"Welcome to the typing game ",
"1. Type the entire sentence in one line",
"2. Is timed and will affect the score "};
//creating the file to read in
ofstream out;
out.open("rules.txt");
for(int i=0;i<3;i++){
for(int x=0; x<39; x++){
out<<o[i][x];
}
out<<"\n";
}
out.close();
//creating a new array to read the data that was stored above
char a[3][40];
ifstream in;
in.open("rules.txt");
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
in>>a[i][x];
}
}
in.close();
//and just printing out the array to see the results
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
cout<<a[i][x];
}
}
return 0;
}
在此特定示例中,请勿使用>>。 它从文件中读取格式化的数据。 无论使用
in.get(a[i][x]);
甚至更好的是,删除您的char数组并将它们声明为字符串,然后将它们放入动态容器中,比如说vector。
ifstream in("rules.txt");
vector<string> myLines;
while (!in.eof()) {
string temp;
getline(in,temp);
myLines.push_back(temp);
}
现在,将所有规则存储在向量中的单独字符串中。 将它们写入文件也很容易。 当您使用for循环从0到40进行迭代,并且字符串的长度不超过40个字符时,您将获得“ random ascii”。
默认情况下,提取运算符>>将忽略空格。 您可以按照其他答案中的建议读取未格式化的数据,也可以更改以下默认行为:
in.open("rules.txt");
in >> noskipws;
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
in>>a[i][x];
}
}
第1部分
首先出来没有空格
问题在这里
for(int x=0; x<39; x++){
out<<o[i][x];
}
您只写入数据,并且不格式化输出。
您有两种可能的解决方案:
<iomanip>
并使用setw
和setfill
第二个选项的示例:
for(int x=0; x<39; x++) {
out << o[i][x] <<" ";
}
显然,这还将在最后一个条目之后(或第一个条目之前)放置空格。 如果您不希望这样做,则需要附加代码。
第2部分
我最后得到一些随机的ascii
问题(如其他人所述)在这里:
for(int i=0;i<3;i++){
for(int x=0; x<39; x++)
您可以随意限制/增加输出,而不必考虑必须写入/读取的变量的实际大小。
对于编写(对于屏幕或文件来说,是相同的),您应该执行类似的操作(请注意,如果o
是向量的向量,而不是char数组,则这是一个解决方案。我不希望使用数组。)
for(int i=0;i<o.size();i++){
for(int x=0; x<o[0].size(); x++)
为了阅读,您需要检查是否要更改行和/或是否已到达文件末尾。
如果我没记错的话,每行末尾缺少/ n会阻止“自动换行”,并且全部出现在一行上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.