C++怎么把文本文件中的数据一行一行读出后存到数组里面
如:
14.8710373022865490
14.4078392848202680
14.4461924174540820
14.0572268190424620
13.6271417430539470
13.4037407958168820
12.7490292405028750
12.2693965610416470
12.0518395076865090
11.7411374917238780
C++一点不会,着急用,麻烦从头到尾写详细点,谢谢!~
[解决办法]
我给你个例子,包含了对话框的:
void CDemoDoc::ReadFromDisk(CArray <Template_info,Template_info> & ClassfyTemplate,CString & strPath)
{
Template_info a;
CFile file;
int k;
if(file.Open(strPath,CFile::modeRead,NULL))
{
CString tmpStr;
TCHAR* tBuf=tmpStr.GetBuffer(file.GetLength());
file.Read(tBuf,file.GetLength());
tmpStr=tBuf;
int l;
int k=0;
for(int j=0;j <file.GetLength();j++)
{
if(*(tBuf+j)==48)
{
float d=atof(tmpStr.Mid(j,8));
a.Center[l]=d;
l++;
j=j+9;
if(l==64)
k=1;
if(l> 64)
{
AfxMessageBox(_T( "聚类中心数据读取错误! "));
return;
}
if(ClassfyTemplate.GetSize()> 20)
{
AfxMessageBox(_T( "聚类种数读取错误! "));
return;
}
}
else
{
if(k!=0)
{
ClassfyTemplate.Add(a);
k=0;
}
Hanzi_info m;
m.name=tmpStr.Mid(j,2);
a.Template1.push_back(m);
l=0;
j++;
}
if(ClassfyTemplate.GetSize()==19 && k!=0)
{
ClassfyTemplate.Add(a);
k=0;
}
}
}
return;
}
我是按自己数据格式读取的,你自己改改就可以了。
[解决办法]
C代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *f;
char buf[BUF_SIZE];
f = fopen( "filename ", "r ");
if(f == NULL)
{
return;
}
while(!feof(f))
{
fgets(buf,sizeof(buf),f);
//Do something
}
return 0;
}
[解决办法]
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
int main(){
FILE* file = NULL;
file = fopen( "main.cpp ", "r ");
char** str = NULL;
str = new char*[60];
for (int i = 0; i < 60; i++) {
str[i] = new char[80];
}
int row = 0;
while (!feof(file)) {
fgets(str[row++], 80, file);
}
for (int i = 0; i < row; i++) {
cout < < str[i];
}
return 0;
}
这个程序就可以
[解决办法]
#include <vector>
#include <fstream>
#include <string>
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
ifstream ifile( "test.txt ");
vector <string> str;
string line;
while (!ifile.eof())
{
getline(ifile, line); //读取一行
//cout < < "line: " < <line < <endl;
str.push_back(line); //插入到 vector
}
cout < <endl;
int len=str.size(), i;
for(i=0; i <len; i++)
cout < < "in vector: " < <str[i] < <endl; //数组方式访问也许更熟悉一些
return 0;
}
test.txt 文件内容:
14.8710373022865490
14.4078392848202680
14.4461924174540820
14.0572268190424620
13.6271417430539470
13.4037407958168820
12.7490292405028750
12.2693965610416470
12.0518395076865090
11.7411374917238780
[解决办法]
#include <iostream>
#include <valarray>
#include <fstream>
#include <string>
//#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
const int num =50;
int i = 7109;
valarray <double> data_x(num);
valarray <double> data_y(num);
int idx = num;
while (idx) //给data_x赋值
{
data_x[idx-1] = i--;
idx--;
}
ifstream inf;
string filename;
cout < < "Please input the filename: " < <endl;
cin> > filename;
inf.open(filename.c_str());
int numRead = 0;
while (!inf.eof()) {
inf> > data_y[numRead];
++numRead;
if (numRead> =num) break;
}
double A = 0.0;
double B = 0.0;
double C = 0.0;
double D = 0.0;
A = data_y.sum ();
B = data_x.sum ();
C = (data_x * data_y).sum();
D = (data_x * data_x).sum();
double k = (A * B - data_x.size () * C) / (B * B - data_x.size () * D);
double b = (B * C - A * D) / (B * B - data_x.size () * D);
//输出
cout < < "斜率k: " < <k < <endl;
cout < < "截距b: " < <b < <endl;
system( "PAUSE ");
return 0;
}