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()
是解决方案吗?如果不能够
#包含
,这可能吗?