求助!!如何在C++程序中读写文件中的数据?

在D盘根目录下有一个txt文件,里面数据如下:
2 8 2
1 6 -1
2 -1 2
现在要把这些数据输入到C++程序中的A[i][j]数组,并且假设txt文档中矩阵大小未知。经过一番处理后,
A[i][j]= 1 4 1
0 1 -1
0 0 1
再把数组A中数据输出到D盘的原文件中。
请问各位大侠,整个过程该如何实现?
谢谢!!
四楼的infile >> a[m][n]语句得到的是什么?为什么类似-9.25596e+06的东西?

我写这个的前提是已经有一个文件,而且文件里面有相应的数据。因为不知道你的那些处理是什么,所以没有进行处理。我所做的只是将数据读了出来,然后放到了二维数组里面,然后再将这些数据写到了另外的一个方件里面。那些处理,你可以直接对这个程序中二维数组进行处理(数据里面存的就是原文件的数据),然后再将二维数组里面的数据写回原文件。编译器我用的是VS.
infile >> a[m][n]这句话,就是将原文件里面的数据读到一个二维数组里面。m和n都是从零开始。我这里可以运行成功啊。我不知道你的原因是什么。
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
ifstream infile;
ofstream outfile;
int ch;
int row = 1;
int column = 1;
infile.open("d://hello.txt");
while ((ch = infile.get()) != EOF)
{
column++;
if (ch == 10)
{
row++;
}
}
column = column / 2 / row;
infile.close();
infile.clear();
infile.open("d://hello.txt");
//在行列都知道之后,动态创建一个二维数组
int **a = new int *[row];
for (int i = 0; i < row; ++i)
{
a[i] = new int[column];
}
int m = 0;
int n = 0;
while (infile >> a[m][n])
{
++n;
if (n % 3 == 0)
{
++m;
n = 0;
}
}
infile.close();
outfile.open("d://reHello.txt");
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < column; ++j)
{
outfile << a[i][j] << " ";
}
outfile << endl;
}
//释放空间
for (int i = 0; i < row; ++i)
{
delete [] a[i];
}
delete []a;
a = NULL;
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-25
关键代码
#include <fstream>

ifstream fin("D:\\data.txt");
//如同普通cin一样使用fin,得到数据
fin.close();
ofstream fout("D:\\data.txt");
//如同普通cout一样使用fout,输出数据
fout.close();

需要注意的是,txt文档中矩阵大小未知,提供三个方案

一:在自主写代码的时候,在txt文档的第一行加两个数据,说明i和j,可以省下很多事
二:在txt文档规定一定要那么样的话,就用翻翻STL大全,查查流下面的方法,通过识别换行符统计行列
三:在能事先确定一定是方阵的情况下,可以先弄一个零时一维数组数组,比如接收数据,然后再把数组长度开方;
第2个回答  2009-07-25
c++中输出和输入导屏幕和键盘的类别声明包含再标题文件<iostream.h>中,而磁盘类文件的 I/O则声明再包含标题文件<fstream.h>内。

输入和输出格式:

输出到磁盘 ofsteam 识别字(“文件名”)

从磁盘读文件 ifsteam 识别字("文件名“)

整数数据的输入输出

整数数据存储再磁盘内,每个文字各占一个字节。

例如:

#include <fstream.h>
#include <iostream.h>

//计算文件中有多少行
int getrowcount()
{
int rowcount=-1;
const MAX=200;
char buffer[MAX];
ifstream infile("data.txt");
while(infile)
{
infile.getline(buffer,MAX);
rowcount++;
}
infile.close();
return rowcount;
}

//写文件
void write()
{
int i=0;
ofstream outfile("data2.txt"); //写文件
for(i=0;i<10;i++)
outfile<<i<<" "; //空格是为了避免数值连接在一起加上去的,
outfile.close();
cout<<"写文件成功!"<<endl;
}

//读文件
void read()
{
int data;
ifstream infile("data.txt"); //读文件
for(int i=0;i<10;i++)
{
infile>>data ; //读数据的时候因为数据间有一个空格才能完整的读出
cout<<data<<" "; //输出到屏幕,加上空格是为了分开数字
}
infile.close();
cout<<endl<<"读文件完毕!"<<endl;
}

void main()
{
int rows=0;
rows=getrowcount();//计算文件中有多少行
cout<<"文件中共有"<<rows<<"行"<<endl;
read(); //读文件
write(); //写文件

}

浮点数

浮点数因为有小数点,在存储数据时与整数相同,只要每个数据加上一个空格就可以区隔相邻的数据
第3个回答  2009-07-25
我用的fread和fwrite函数,在D盘建了个txt文件"array.txt",里面有矩阵,运行程序自己写个新矩阵,再输入到原文件中,看看这个可以不
/**
*读写文件
**/

#include <iostream>
using namespace std;

int main()
{
FILE *pf;
char ch='\0';
char A[30]={'\0'};//保存文件矩阵的数组
char *p=A;//数组指针
int i=0;//计数器

pf=fopen("D:\\array.txt","r+");//打开文件用于读/写

fread(A,1,30,pf);//读文件内容到数组A

cout<<"请输入要更改的3*3的新矩阵:"<<endl;

//更改数组信息,当输入第3个换行符既3*3矩阵输入完毕后结束循环
while(1)
{
*p=getchar();
if(*p=='\n')
i++;
if(i>=3)
break;
p++;
}

fseek(pf,0,SEEK_SET);//文件定位,将要写出到文件的内容定位到文件开头以覆盖原文件内容

fwrite(A,1,30,pf);//写出新矩阵到文件

return 0;
}
相似回答