从文件中读取数据并将其写入其他文件(Visual studio 2012)
Reading data from a file and Writing it to a different file (Visual studio 2012)
我遇到的问题是,我从文件中读取数据,然后将它们写入文件,但第一个元素就被剪切掉了。我给你举个例子。很抱歉使用了这种语言,但它不应该打断对正在发生的事情的理解,这段代码有点简单。
数据文件也是如此。由此:
4 12
Domas P 2 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 2 juoda Z 0 juoda R 0 juoda B 0 juoda V 0 juoda K 0 juoda
Lukas P 4 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 4 juoda Z 0 juoda R 0 juoda B 0 juoda V 0 juoda K 0 juoda
Tomas P 6 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 6 juoda Z 0 juoda R 0 juoda B 0 juoda V 0 juoda K 0 juoda
Tadas P 8 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 8 juoda Z 0 juoda R 0 juoda B 0 juoda V 0 juoda K 0 juoda
我得到了这个:
P 2 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 2 juoda P 4 balta Z 0 balta R 0 balta B 0 balta V 0 balta
Lukas P 4 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 4 juoda P 6 balta Z 0 balta R 0 balta B 0 balta V 0 balta
Tomas P 6 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 6 juoda P 8 balta Z 0 balta R 0 balta B 0 balta V 0 balta
Tadas P 8 balta Z 0 balta R 0 balta B 0 balta V 0 balta K 0 balta P 8 juoda Z 0 juoda R 0 juoda B 0 juoda V 0 juoda K 0 juoda
第一个元素"多玛斯"就被删掉了。如果它是一个int类型的变量,它将显示-88464654646或类似的内容。正如我已经知道的,这意味着程序找不到任何东西,写东西,清空空间或那些随机的负面内容。然而,我不知道如何解决这个问题。谢谢你的帮助!
#include <iomanip>
#include <iostream>
#include <string>
#include <istream>
#include <fstream>
using namespace std;
const char CD1fv[] = "Komplektai.txt";
const char CD2fv[] = "Parama.txt";
const char CRfv[] = "Turnyras.txt";
class Komplektas
{
private:
int eile;
int kiek;
string fig;
string spalva;
string vardas;
public:
Komplektas(int k = 0, string f = "", string s = "") :
kiek(k), fig(f), spalva(s) { }
~Komplektas() { }
void Deti(int k, string f, string s) { kiek = k; fig = f, spalva = s; }
void Eile(int e) { eile = e; }
void Vardas(string v) { vardas = v; }
string ImtiVarda() { return vardas; }
int ImtiEile() { return eile; }
string ImtiFigura() { return fig; }
int ImtiKieki() { return kiek; }
string ImtiSpalva() {return spalva; }
};
class Matrica
{
public:
static const int CMaxEil = 100;
static const int CMaxSt = 7;
private:
Komplektas A[CMaxEil][CMaxSt];
int n;
int m;
public:
Matrica(int nn = 0, int mm = 0) : n(nn), m(mm) { }
~Matrica() { }
int ImtiN() { return n; }
int ImtiM() { return m; }
void DetiN(int nn) {n = nn; }
void DetiM( int mm) { m = mm; }
void DetiReiksme( int i, int j, Komplektas r) {A[i][j] = r; }
Komplektas ImtiReiksme(int i, int j) { return A[i][j]; }
};
void Ivesti1(const char fv[], Matrica & A);
void Ivesti2(const char fv[], Matrica & A);
void Spausdinti1(const char fv[], Matrica & A);
void Spausdinti2(const char fv[], Matrica & A);
int main()
{
Matrica Figuros;
Ivesti1(CD1fv, Figuros);
Spausdinti1(CRfv, Figuros);
Ivesti2(CD2fv, Figuros);
Spausdinti2(CRfv, Figuros);
cout << "Pradiniai duomenys isspausdinti faile " << CRfv << endl;
cout << "Programa baige darba" << endl;
return 0;
}
void Ivesti1(const char fv[], Matrica & A)
{
int n, m;
string spalva;
string fig;
int eile, kiek;
Komplektas komplektas;
ifstream fd(fv);
fd >> n >> m;
A.DetiN(n);
A.DetiM(m);
fd.ignore();
for (int i = 0; i < n; i++){
fd >> eile;
komplektas.Eile(eile);
for (int j = 0; j < m; j++) {
fd >> fig >> kiek >> spalva;
komplektas.Deti(kiek, fig, spalva);
A.DetiReiksme(i, j, komplektas);
}
}
fd.close();
}
void Spausdinti1(const char fv[], Matrica & A)
{
Komplektas x;
ofstream fr(fv, ios::app);
for (int i = 0; i < A.ImtiN(); i++) {
fr << i+1;
for (int j = 0; j < A.ImtiM(); j++) {
x = A.ImtiReiksme(i , j);
fr << setw(5) << x.ImtiFigura() << " " << right
<< setw(6) << x.ImtiKieki() << " " << x.ImtiSpalva();
}
fr << endl;
}
fr << endl;
fr.close();
}
void Ivesti2(const char fv[], Matrica & A)
{
int n, m;
string spalva;
string fig;
string vardas;
int eile, kiek;
Komplektas komplektas;
ifstream fd(fv);
fd >> n >> m;
A.DetiN(n);
A.DetiM(m);
fd.ignore();
for (int i = 0; i < n; i++){
fd >> vardas;
komplektas.Vardas(vardas);
for (int j = 0; j < m; j++){
fd >> fig >> kiek >> spalva;
komplektas.Deti(kiek, fig, spalva);
A.DetiReiksme(i, j, komplektas);
}
}
fd.close();
}
void Spausdinti2(const char fv[], Matrica & A)
{
Komplektas x;
ofstream fr(fv, ios::app);
for (int i = 0; i < A.ImtiN(); i++) {
fr << x.ImtiVarda();
for (int j = 0; j < A.ImtiM(); j++) {
x = A.ImtiReiksme(i , j);
fr << setw(5) << x.ImtiFigura() << " " << right
<< setw(6) << x.ImtiKieki() << " " << x.ImtiSpalva();
}
fr << endl;
}
fr << endl;
fr.close();
}
您对文件"Komplektai.txt"的读取与其格式不同步。你首先读到(在Ivesti1中)n和m是两个整数。很好,没问题。您忽略了一个字符。我不明白。你不必自己处理。接下来输入for循环。循环中要做的第一件事是读取eile,一个int。但文件的位置指向"Domas"。因此,您的流进入错误状态,以后的所有读取都将失败。
我建议您在调试器中逐步完成代码,Visual Studio有一个出色的调试器。请注意读取成功时如何修改变量。
在C++中,通常的习惯用法是尝试读取某些内容,然后在继续之前验证读取是否成功。
for (int j = 0; j < m; j++) {
fd >> fig >> kiek >> spalva;
if (!fd) {
std::cerr << "something went wrong" << std::endl;
break; // Can't continue, the stream is in a bad state
}
// Here we know the previous reads succeeded and we can use the read data
....
}
相关文章:
- 在其他文件中创建类时在 c++ 项目中不起作用
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 如何在其他文件中使用函数
- C++ - 忽略并从其他文件获取数据
- CMake:在其他目录中找不到我的头文件
- 无法使用 CMake 从其他文件夹添加源文件
- 如何使用 C/C++ 和 system() 系统调用以外的其他方法在 Linux 中获取文件功能?
- 从文件中查找单词并替换到其他文件中
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- 没有头文件如何使用c ++调用其他模块中的函数?
- 访问从 CPP 文件到其他头文件的静态变量
- 不能在其他文件中包含结构
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 如何在 Linux 下使用 c++ 知道文件是否被其他进程使用?
- 使用函数打开文件,然后让其他函数利用该文件?
- 如何使用Winforms C#或C++.Net在不更改文件中其他内容的情况下修改jpg文件中的Orientation e
- 如何调试visual studio 2017生成的C++代码.android中的SO文件和其他第三方库
- 如何使用QXmlStreamReader解析包含对其他XML文件的引用的XML文件
- 如何在不受其他文件影响的情况下"by itself" Visual Studio 项目中运行C++文件?
- 如何将 cpp 文件中的静态函数公开给其他文件