首先,我对c ++的了解非常有限,这是我的第一堂课,所以这看起来很愚蠢,但请耐心等待,我会请你保持一点点简单或提前解释好。
好的目标是我想用里面的规则创建这个文件,这样我就可以在一个单独的函数中读取它。然而,当我运行这个我没有错误,但它首先出来没有任何空格,我最后得到一些随机的ascii。
这是运行代码的结果 Welcometothetypinggame1.Typetheentiresentenceinoneline2.IstimedandwillaffectthescoreØ-™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;
}
答案 0 :(得分:5)
问题在于:
in>>a[i][x];
提取运算符>>
提取格式化数据。格式化数据意味着由空格(如空格)分隔的字符块。在提取期间,将忽略所有空格字符。因此,您无法使用>>
运算符读取空白字符。
您需要做的是阅读未格式化的数据:
in.get(a[i][x]);
答案 1 :(得分:2)
请勿使用&gt;&gt;在这个特定的例子中。它从您的文件中读取格式化数据。使用
in.get(a[i][x]);
或者甚至更好,删除你的char数组并将它们声明为字符串并将它们放在一个动态容器中,让我们说矢量。
ifstream in("rules.txt");
vector<string> myLines;
while (!in.eof()) {
string temp;
getline(in,temp);
myLines.push_back(temp);
}
现在,您已将所有规则存储在向量中的单独字符串中。将它们写入文件也很容易。当您使用for循环从0到40迭代,并且字符串不是40个字符长时,您将获得“随机ascii”。
答案 2 :(得分:1)
提取算子&gt;&gt;默认情况下会忽略空格。 您可以按照其他答案中的建议读取未格式化的数据 或者你可以改变这样的默认行为:
in.open("rules.txt");
in >> noskipws;
for(int i=0;i<3;i++){
for(int x=0; x<40; x++){
in>>a[i][x];
}
}
答案 3 :(得分:0)
第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++)
相反,对于阅读,您需要检查是否要更改行和/或是否到达文件的末尾。
答案 4 :(得分:0)
如果我没记错的话,每行末尾缺少/ n会阻止'wordwrap',它会全部出现在一行上。