如何使用 C++ 在 .txt 文件中写入、读取和重写
Posted
技术标签:
【中文标题】如何使用 C++ 在 .txt 文件中写入、读取和重写【英文标题】:how to write, read and rewrite in a .txt file with c++ 【发布时间】:2015-01-30 22:30:49 【问题描述】:我是一名学生,我必须创建一个程序并告知该程序的使用,所以如果文件不存在,我必须创建它;如果存在,则读取并保存变量,如果满足特定条件则必须增加其值,最后程序必须用新值重写文件,保存并关闭它。我做了一个代码,但效果不好,我不知道错误在哪里。请帮帮我。
#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 对他的问题所做的一样多。 【参考方案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:是的,我确实认为这是问题所在。 为什么?存在名称阴影。 他正在重新打开 ofstreamarchivoLectura
期望重新打开 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;
【讨论】:
以上是关于如何使用 C++ 在 .txt 文件中写入、读取和重写的主要内容,如果未能解决你的问题,请参考以下文章