在C ++中使用带有文件输入的getline()

时间:2013-12-23 08:13:21

标签: c++ getline

我正在尝试用C ++做一个简单的初学者的任务。我有一个包含该行的文本文件 “约翰史密斯31”。而已。我想使用ifstream变量读取此数据。但是我想把名字“John Smith”读成一个字符串变量,然后将数字“31”读成一个单独的int变量。

我尝试使用getline函数,如下所示:

ifstream inFile;
string name;
int age;

inFile.open("file.txt");

getline(inFile, name); 
inFile >> age; 

cout << name << endl;
cout << age << endl;  

inFile.close();    

这个问题是它输出整行“John Smith 31”。是否有一种方法可以告诉getline函数在获得名称之后停止然后再“重启”以检索数字?没有操作输入文件,那是什么?

4 个答案:

答案 0 :(得分:6)

getline,因为它命名状态,读取整行,或至少直到可以指定的分隔符。

所以答案是“不”,getline与您的需求不符。

但你可以这样做:

inFile >> first_name >> last_name >> age;
name = first_name + " " + last_name;

答案 1 :(得分:2)

你应该这样做:

getline(name, sizeofname, '\n');
strtok(name, " ");

这将为您提供名称中的“joht” 然后得到下一个标记,

temp = strtok(NULL, " ");

temp 将获得“smith”。那么你应该使用字符串连接在名称的末尾附加temp。为:

strcat(name, temp);

(您也可以先添加空格,以获得其间的空格。)

答案 2 :(得分:1)

ifstream inFile;
string name, temp;
int age;

inFile.open("file.txt");

getline(inFile, name, ' '); // use ' ' as separator, default is '/n'. Now name is "John".
getline(inFile, temp, ' '); // Now temp is "Smith"
name.append(1,' ');
name += temp;
inFile >> age; 

cout << name << endl;
cout << age << endl;  

inFile.close();    

答案 3 :(得分:0)

您可以使用此代码使用文件中的getline。 此代码将从文件中提取整行。然后可以使用while循环遍历while(ins)的所有行;

 ifstream ins(filename);
string s;
std::getline (ins,s);