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

use*_*869 6 c++ getline

我试图用C++做一个简单的初学者任务.我有一个包含"John Smith 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();    
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*han 7

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

所以答案是"不",getline不符合你的需要.

但你可以这样做:

inFile >> first_name >> last_name >> age;
name = first_name + " " + last_name;
Run Code Online (Sandbox Code Playgroud)

  • 如果你查看[带有`std::string`的operator+()重载列表](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B)你会看到只要参数是“std::string”,它就会起作用。那里没有魔法:)但是如果你用“char*”调用+,它就不起作用。 (3认同)
  • [是的,确实如此](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B) (2认同)
  • 我的意思是,如果这样的话。我在某处读到,我们需要将字符串指定为 **std::string x;**,以使用 + 进行连接。否则,编译器会假设您正在尝试添加 char 指针。这是仪式吗?或者它只是按照提到的方式工作?只是想为我自己澄清一下。谢谢 (2认同)

小智 7

ifstream inFile;
string name, temp;
int age;

inFile.open("file.txt");

getline(inFile, name, ' '); // use ' ' as separator, default is '\n' (newline). 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();    
Run Code Online (Sandbox Code Playgroud)