【问题标题】:how to write, read and rewrite in a .txt file with c++如何使用 C++ 在 .txt 文件中写入、读取和重写
【发布时间】:2023-03-22 03:16:02
【问题描述】:

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

#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;
}

【问题讨论】:

  • 告诉我们为什么它不起作用
  • “但效果不好” 这不是一个非常详细、准确的描述。你能提供任何信息吗??
  • @ChrisWard1000:我认为 OP 希望 我们 可以告诉 他们 为什么它不起作用。但是,如果 OP 告诉我们 如何 它不起作用,那将会很有帮助。
  • 我说它不起作用,因为它显示:第 1-2 行:2293512 第 3-5 行:2293456 第 6-7 行:4287201 其他行:0
  • @Lightness Races in Orbit 你是绝对正确的。我在评论中付出的努力与 OP 对他的问题所做的一样多。

标签: c++ rewrite fstream ifstream ofstream


【解决方案1】:

我看到两个不同的变量,它们的名称完全相同,但类型不同,作用域也不同。

你觉得这有点令人困惑吗?

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;

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

【讨论】:

  • 您认为这是问题所在吗? (提示:不 - 应该是评论!)
  • @Lightness:是的,我确实认为这是问题所在。
  • 为什么?存在名称阴影。
  • 他正在重新打开 ofstream archivoLectura 期望重新打开 ifstream。这比简单地为两个变量具有相同的名称更进一步,这在无效时会导致编译错误。当然,如果他遵循良好的理智,那么他不会使用相同的名称,那么就不会让他的误解导致这个问题。 :)
  • 这就是我的观点。避免混淆(尽管有效)构造的程序员通常会避免更多的错误。编写令人困惑的结构的程序员会写更多的错误。 (例如。我认为我们同意)
【解决方案2】:

检查一下....我认为这就是解决方案

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2015-07-26
    • 2015-05-29
    • 1970-01-01
    相关资源
    最近更新 更多