C++ 使用ifstream读取.txt并使用ofstream写入新的.txt文件,但只有第一行起作用
我试图读取一个文本文件,C++ 使用ifstream读取.txt并使用ofstream写入新的.txt文件,但只有第一行起作用,c++,io,stream,C++,Io,Stream,我试图读取一个文本文件,text.txt,其中的文本表示十六进制值: 0123456789abcdef 0123456789abcdef 0123456789abcdef 0123456789abcdef 0123456789abcdef 0123456789abcdef 0123456789abcdef 我应该读这个文件并使用流的写入一个新文件output.txt来写入这些六进制值的二进制等分,其中-表示0,表示1 例如: 0 = ---- 1 = ---# 2 = --#- ... F
text.txt
,其中的文本表示十六进制值:
0123456789abcdef
0123456789abcdef
0123456789abcdef
0123456789abcdef
0123456789abcdef
0123456789abcdef
0123456789abcdef
我应该读这个文件并使用流的写入一个新文件output.txt
来写入这些六进制值的二进制等分,其中-
表示0,
表示1
例如:
0 = ----
1 = ---#
2 = --#-
...
F = ####
我的output.txt的输出是
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
应该是什么时候
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
---#--#---##-#---#-#-##--####---#--##-#-#-####--##-####-####
我的逻辑在那里,但似乎output.txt
只写text.txt
的第一行。这让我相信我只是在读第一行
我被迫使用c风格的字符串,因此我要读入的字符数组
这是我的密码
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream myfile;
myfile.open("test.txt");
char words[10001] = {'\0'}; //c-style string
if (myfile.is_open())
{
while (!myfile.eof())
{
myfile >> words; //read myfile text into char words[]
ofstream outfile;
outfile.open("output.txt"); //ofstream to output.txt based on character in words[]
for (char c : words) //the ofstream to output.txt based on char c in words
{
if (c == '0')
outfile << "---#";
else if (c == '2')
outfile << "--#-";
else if (c == '3')
outfile << "--##";
else if (c == '4')
outfile << "-#--";
else if (c == '5')
outfile << "-#-#";
else if (c == '6')
outfile << "-##-";
else if (c == '7')
outfile << "-###";
else if (c == '8')
outfile << "#---";
else if (c == '9')
outfile << "#--#";
else if (c == 'a')
outfile << "#-#-";
else if (c == 'b')
outfile << "#-##";
else if (c == 'c')
outfile << "##--";
else if (c == 'd')
outfile << "##-#";
else if (c == 'e')
outfile << "###-";
else if (c == 'f')
outfile << "####";
}
}
myfile.close();
}
return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
ifstreammyfile;
myfile.open(“test.txt”);
字符字[10001]={'\0'};//c样式字符串
如果(myfile.is_open())
{
而(!myfile.eof())
{
myfile>>words;//将myfile文本读入char words[]
出流孔的直径;
outfile.open(“output.txt”);//根据words[]中的字符将流传输到output.txt
for(char c:words)//基于words中的char c的output.txt的ofstream
{
如果(c=='0')
您使用的输出文件
ofstream outfile;
outfile.open("output.txt");
在循环内部。这将使文件在每次迭代中打开,并将清除文件的内容。您应该在while
循环之前移动此文件
还要注意,您的条件,而(!myfile.eof())
是。相反,您应该将读取myfile>>的单词移动到条件中,以检查在使用“读取”之前读取是否成功。
ofstream outfile;
outfile.open("output.txt");
在循环内部。这将使文件在每次迭代中打开,并将清除文件的内容。您应该在while
循环之前移动此文件
还请注意,您的条件,而(!myfile.eof())
是。与此相反,您应该将读取myfile>>的单词
移动到条件中,以检查在使用“读取”之前读取是否成功。我建议使用此方法处理文件:
ifstream infile("infile.txt");
ofstream outfile("outfile.txt");
if(infile.is_open()){
while(!infile.eof()){
//do the readings
}
}else
{
cout << "ERROR::FILE NOT SUCCESFULLY OPENED";
}
ifstream-infle(“infle.txt”);
流出流文件(“outfile.txt”);
if(infle.is_open()){
而(!infle.eof()){
//做读数
}
}否则
{
cout对于文件处理,我建议采用这种方法:
ifstream infile("infile.txt");
ofstream outfile("outfile.txt");
if(infile.is_open()){
while(!infile.eof()){
//do the readings
}
}else
{
cout << "ERROR::FILE NOT SUCCESFULLY OPENED";
}
ifstream-infle(“infle.txt”);
流出流文件(“outfile.txt”);
if(infle.is_open()){
而(!infle.eof()){
//做读数
}
}否则
{
你不能读所有的行吗?你只是需要为每一行创建一个新文件,覆盖上一行。你应该保持文件打开,而不是关闭并覆盖它。为什么if(c==“1”)
省略了大小写?为什么不使用开关
?为什么不使用数组或作为查找表?@MikeCat表示法还有一个简单的规则-因此他可以用一个基本循环使它简单得多。@ALX23z非常感谢您的完全正确。不确定这是如何通过的me@MikeCAT遗憾的是,我们不能使用任何其他数据结构,因为我们没有了解了它们您读取了所有行。只需要为每行创建一个新文件,覆盖上一行。您应该保持文件打开,而不是关闭并覆盖它。为什么if(c==“1”)
省略了大小写?为什么不使用开关
?为什么不使用数组或作为查找表?@MikeCat表示法还有一个简单的规则-因此他可以用一个基本循环使它简单得多。@ALX23z非常感谢您的完全正确。不确定这是如何通过的me@MikeCAT遗憾的是,我们不能使用任何其他数据结构,因为我们没有非常感谢。我基本上每次循环都会实例化一个新的ofstream并覆盖旧的。如果你不介意的话,再问一个简单的问题:有什么方法可以在我到达行的末尾时进行检查吗?我的输出可以工作,但在一行上确实很长。使用getline()可以吗
是这里的解决方案吗?如果没有#include
,这可能吗?非常感谢。我基本上每次循环时都会实例化一个新的流,并覆盖旧的流。如果您不介意的话,再问一个简单的问题:有什么方法可以在我到达行的末尾时检查吗?我的输出是有效的,但实际上是有效的一行很长。在这里使用getline()
是解决方案吗?如果不能够#包含,这可能吗?