C++中怎么逐行读取数据
例如1231.0001.0001.0001.0011.0011.0011.0021.0021.0021.0041.0041.0041.0051.0051.0061.006...
例如
1
23
1.000 1.000 1.000
1.001 1.001 1.001
1.002 1.002 1.002
1.004 1.004 1.004
1.005 1.005 1.006
1.006 1.007 1.008
……
读入的数据最好是float型或者double型的,谢谢 展开
1
23
1.000 1.000 1.000
1.001 1.001 1.001
1.002 1.002 1.002
1.004 1.004 1.004
1.005 1.005 1.006
1.006 1.007 1.008
……
读入的数据最好是float型或者double型的,谢谢 展开
5个回答
展开全部
可以使用C++的库函数getline实现。
getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。
1)读到文件结束符;
2)遇到函数指定的结束符;
3)输入达到最大限度。
getline有两种重载:
istream &getline( char *buffer, streamsize num );
istream &getline( char *buffer, streamsize num, char delim );
参数说明:
buffer: 读取的数据将存在buffer中。
num:最多读取num个字符。即之前所说的最大限度。
delim:结束符,当遇到指定的结束符时将结束输入。在第一种重载中,结束符为\n,即遇到换行结束。
所以要实现整行读取,使用第一种重载就可以了。示例代码如下:
#include <iostream>
using namespace std;
int main()
{
char buf[1024];//存储的buf。
while(getline(buf,sizeof(buf)))//读取一行。
{
cout << "read line:" <<buf<<endl;//输出读取到的数据。
}
return 0;
}
展开全部
假定文件在 abc.txt 中,无空白行
用读入1行,再找每行最后一个数的开始位置,用 sscanf 读得。
#include<stdio.h>
main(){ FILE *fin;
char str[80];
int i,L,n=0;
double x[30000];
fin=fopen("abc.txt","r");
while(1)
{
if ( fgets(str,80,fin)==NULL) break;
L = strlen(str);
for (i=L-1;i>0;i--){
if (str[i-1]==' ' && (str[i]>='0' && str[i]<='9')){
sscanf(&str[i-1],"%lf",&x[n]);n++;break;}
};
}
for (i=0;i<n;i++) printf("%g\n",x[i]);
return 0;
}
=====
另一种方法是:
fscanf(fin,"%*s %*s %*s %lf",&x[i]);
因为你的数据有规律,可以跳过3个 读1个。 %*s 就是跳一个字符串。
用读入1行,再找每行最后一个数的开始位置,用 sscanf 读得。
#include<stdio.h>
main(){ FILE *fin;
char str[80];
int i,L,n=0;
double x[30000];
fin=fopen("abc.txt","r");
while(1)
{
if ( fgets(str,80,fin)==NULL) break;
L = strlen(str);
for (i=L-1;i>0;i--){
if (str[i-1]==' ' && (str[i]>='0' && str[i]<='9')){
sscanf(&str[i-1],"%lf",&x[n]);n++;break;}
};
}
for (i=0;i<n;i++) printf("%g\n",x[i]);
return 0;
}
=====
另一种方法是:
fscanf(fin,"%*s %*s %*s %lf",&x[i]);
因为你的数据有规律,可以跳过3个 读1个。 %*s 就是跳一个字符串。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ifstream fin( strDataInFile.c_str(), std::ifstream::in || std::ifstream::binary );
string strLine = '"
while( getline( fin, strLine ) )
{
...
}
大概就是这样的结构吧,至于具体的类型,用的时候再转过来吧。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先把一行读进一个String里面
String curline = getline(cin)
然后用字符串流是stringstream从一个字符串里面解析
stringstream ss;
double cur;
ss << curline;
while(ss >> cur){
//store cur;
}
String curline = getline(cin)
然后用字符串流是stringstream从一个字符串里面解析
stringstream ss;
double cur;
ss << curline;
while(ss >> cur){
//store cur;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询