如何使用c ++在.txt文件中编写,读取和重写

时间:2014-12-02 15:49:07

标签: c++ rewrite fstream ifstream ofstream

我是学生,我必须创建一个程序并告知程序的使用,所以如果文件不存在,我必须创建它;如果它存在,读取并保存变量,如果它满足特定条件,它必须增加它们的值,最后程序必须用新值重写文件,保存并关闭它。我做了一个代码,但它工作不好,我不知道哪里是错误。请帮帮我。

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

int main()

{
int varAux1,varAux2,varAux3,varAux4;
int a;
int var1,var2,var3,var4;


ifstream archivoLectura;
archivoLectura.open("informeuso.txt");


    if (archivoLectura.fail())
    {
        ofstream archivoLectura;
        archivoLectura.open("informeuso.txt");

            archivoLectura<<"linea 1: "<<0<<"\n";
            archivoLectura<<"linea 2: "<<0<<"\n";
            archivoLectura<<"linea 3: "<<0<<"\n";
            archivoLectura<<"linea 4: "<<0<<"\n";

        archivoLectura.close();
        archivoLectura.open("informeuso.txt");

    }


    archivoLectura>>var1;
    archivoLectura>>var2;
    archivoLectura>>var3;
    archivoLectura>>var4;


    varAux1 = var1;
    varAux2 = var2;
    varAux3 = var3;
    varAux4 = var4;


archivoLectura.close();


cout<<"hola"<<endl;
cout<<"programa prueba"<<endl;
cout<<"enter value from 0 to 9"<<endl;
cout<<"a: ";
cin >> a;



if (a>0 && a <3)

{
    var1 = varAux1 + 1;
}
else if(a>2 && a <6)

{
    var2 = varAux2 + 1;

}
else if (a>5 && a<8)
{
    var3 = varAux3 +1;

}
else
{
    var4 = varAux4 + 1;
}


ofstream archivoEscritura;
archivoEscritura.open("informeuso.txt");

    archivoEscritura<<"line 1-2: "<<var1<<"\n";
    archivoEscritura<<"line 3-5: "<<var2<<"\n";
    archivoEscritura<<"line 6-7: "<<var3<<"\n";
    archivoEscritura<<"line other: "<<var4<<"\n";

archivoEscritura.close();

system("pause");
return 0;
}

2 个答案:

答案 0 :(得分:0)

我看到两个不同的变量具有完全相同的名称,但是不同的类型和不同的范围。

你认为这有点令人困惑吗?

ifstream archivoLectura;

ofstream archivoLectura;

<小时/> 按照您的代码:

第1步:

ifstream archivoLectura;
archivoLectura.open("informeuso.txt");  // This might fail, and you check for archivoLectura.fail()

第2步:

archivoLectura>>var1;  // trying to read from the ifstream, which failed to open.
archivoLectura>>var2;  // The ofstream (which was opened successfully) has gone out of scope.
archivoLectura>>var3;
archivoLectura>>var4;

在这里,您尝试从我们知道 无法打开 的文件中读取。
这对我来说似乎是个大问题。

答案 1 :(得分:0)

检查这个....我认为这是解决方案

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

int main()

{
int varAux1,varAux2,varAux3,varAux4;
int a;
int var1,var2,var3,var4;


fstream archivoLectura;
archivoLectura.open("informeuso.txt" , ios::in);


    if (archivoLectura.fail())
    {
            archivoLectura.open("informeuso.txt" , ios::out);
            archivoLectura<<0<<" ";
            archivoLectura<<0<<" ";
            archivoLectura<<0<<" ";
            archivoLectura<<0<<" ";      
            archivoLectura.close();
            archivoLectura.open("informeuso.txt" , ios::in);
    }






    archivoLectura>>var1;
    archivoLectura>>var2;
    archivoLectura>>var3;
    archivoLectura>>var4;
    cout<<var1<<var2<<var3<<var4;

    varAux1 = var1;
    varAux2 = var2;
    varAux3 = var3;
    varAux4 = var4;


archivoLectura.close();


cout<<"hola"<<endl;
cout<<"programa prueba"<<endl;
cout<<"enter value from 0 to 9"<<endl;
cout<<"a: ";
cin >> a;



if (a>0 && a <3)

{
    var1 = varAux1 + 1;
}
else if(a>2 && a <6)

{
    var2 = varAux2 + 1;

}
else if (a>5 && a<8)
{
    var3 = varAux3 +1;

}
else
{
    var4 = varAux4 + 1;
}


fstream archivoEscritura;
archivoEscritura.open("informeuso.txt" , ios::out);

    archivoEscritura<<var1<<" ";
    archivoEscritura<<var2<<" ";
    archivoEscritura<<var3<<" ";
    archivoEscritura<<var4<<" ";

archivoEscritura.close();

system("pause");
return 0;
}