C++中如何逐行读取文件中所需要的数据

比如一个"abc.txt"文件(每行包括姓名和身高):
张三 175
李四 170
王五 160

怎么打开一个文件后,逐行分别将姓名和身高读取出来?

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

int main()
{
ifstream in;
string name = "";
int age = 0;
in.open("abc.txt");

if (!in)
{
cout << "打开文件失败!" << endl;
return -1;
}

while(!in.eof())
{
in >> name >> age;
cout << name << " " << age << endl;
}
in.close();
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-26
用string,先getlien把整行读出来,再分割字符串

ifstream("abc.txt");
string s;
getline(cin, s);

姓名 = s.substr(0, s.find(' '));
身高 = s.substr(s.rfind(' ') + 1);
第2个回答  2009-04-26
C逐行读取文本文件

#include <stdio.h>
#include <dir.h>
#include <string.h>

int READLINE(FILE *fPtr, char *strPtr, int strlen, char ellipsis);

int main(int argc, char *argv[])
{
FILE *finPtr;
char str[10240];
int i;

finPtr = fopen("c:\\1.txt","r");

do
{
i = READLINE(finPtr,str,sizeof(str),0xa);
if (i == 0)
printf("%s\n",str);
}
while(i >= 0);

fclose(finPtr);

return 0;
}

int READLINE(FILE *fPtr, char *strPtr, int strlen, char ellipsis)
{
int ch;
char *tmpPtr;

memset(strPtr,0x0,strlen);
ch=0x0;
tmpPtr=strPtr;

if(feof(fPtr))
return -1;

while(!feof(fPtr)&&ch!=0xa)
{
ch=fgetc(fPtr);
if(ch!=EOF&&ch!='\n')
{
*strPtr=ch;
strPtr++;
}
}
if(*tmpPtr==ellipsis||*tmpPtr=='\0'||*tmpPtr=='\n')
return 1;
else
return 0;
}
第3个回答  2020-07-26
假定文件在
abc.txt
中,无空白行
用读入1行,再找每行最后一个数的开始位置,用
sscanf
读得。
#include
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
评论
0
0
加载更多
第4个回答  推荐于2017-10-10
关键步骤:
1、ifstream in;
2、in.open("abc.txt");
3、while(!in.eof())
{
in >> name >> age;
cout << name << " " << age << endl;
}
4、in.close();
思路:
1、声明一个文件流。
2、打开文件。
3、循环文件直到遇到文件结束符退出。
4、读取每行的数据。
5、关闭文件。
实现代码:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
ifstream in;
string name = "";
int age = 0;
in.open("abc.txt");
if (!in)
{
cout << "打开文件失败!" << endl;
return -1;
}
while(!in.eof())
{
in >> name >> age;
cout << name << " " << age << endl;
}
in.close();
return 0;
}
第5个回答  2009-04-26
用string,先getlien把整行读出来,再分割字符串

ifstream("abc.txt");
string s;
getline(cin, s);

姓名 = s.substr(0, s.find(' '));
身高 = s.substr(s.rfind(' ') + 1);
第6个回答  2009-04-26
C逐行读取文本文件

#include <stdio.h>
#include <dir.h>
#include <string.h>

int READLINE(FILE *fPtr, char *strPtr, int strlen, char ellipsis);

int main(int argc, char *argv[])
{
FILE *finPtr;
char str[10240];
int i;

finPtr = fopen("c:\\1.txt","r");

do
{
i = READLINE(finPtr,str,sizeof(str),0xa);
if (i == 0)
printf("%s\n",str);
}
while(i >= 0);

fclose(finPtr);

return 0;
}

int READLINE(FILE *fPtr, char *strPtr, int strlen, char ellipsis)
{
int ch;
char *tmpPtr;

memset(strPtr,0x0,strlen);
ch=0x0;
tmpPtr=strPtr;

if(feof(fPtr))
return -1;

while(!feof(fPtr)&&ch!=0xa)
{
ch=fgetc(fPtr);
if(ch!=EOF&&ch!='\n')
{
*strPtr=ch;
strPtr++;
}
}
if(*tmpPtr==ellipsis||*tmpPtr=='\0'||*tmpPtr=='\n')
return 1;
else
return 0;
}
第7个回答  2020-07-26
假定文件在
abc.txt
中,无空白行
用读入1行,再找每行最后一个数的开始位置,用
sscanf
读得。
#include
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
评论
0
0
加载更多
第8个回答  推荐于2017-10-10
关键步骤:
1、ifstream in;
2、in.open("abc.txt");
3、while(!in.eof())
{
in >> name >> age;
cout << name << " " << age << endl;
}
4、in.close();
思路:
1、声明一个文件流。
2、打开文件。
3、循环文件直到遇到文件结束符退出。
4、读取每行的数据。
5、关闭文件。
实现代码:
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main()
{
ifstream in;
string name = "";
int age = 0;
in.open("abc.txt");
if (!in)
{
cout << "打开文件失败!" << endl;
return -1;
}
while(!in.eof())
{
in >> name >> age;
cout << name << " " << age << endl;
}
in.close();
return 0;
}
相似回答