C++中怎么逐行读取数据

例如
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型的,谢谢

可以使用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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-22
假定文件在 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 就是跳一个字符串。追问

我想问一下下面这块是什么意思,我刚学编程,很不好意思

本回答被网友采纳
第2个回答  推荐于2017-10-05
ifstream fin( strDataInFile.c_str(), std::ifstream::in || std::ifstream::binary );
string strLine = '"
while( getline( fin, strLine ) )
{
    ...
}

大概就是这样的结构吧,至于具体的类型,用的时候再转过来吧。

本回答被提问者采纳
第3个回答  2015-11-10
第4个回答  2014-08-22
先把一行读进一个String里面
String curline = getline(cin)
然后用字符串流是stringstream从一个字符串里面解析
stringstream ss;
double cur;
ss << curline;
while(ss >> cur){
//store cur;

}