在C++中使用getline()进行文件输入

9

我试图在C++中完成一个简单的初学者任务。我有一个包含一行“John Smith 31”文本的文件。我想使用ifstream变量读取这些数据。但是,我想将名称“John Smith”读入一个字符串变量,然后将数字“31”读入一个单独的整数变量。

我尝试使用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函数在获取名称后停止,然后重新开始获取数字?而不需要操作输入文件呢?


1
如果你不想读取一行,就不要调用 getline。这真的很简单。 - David Schwartz
4个回答

13

getline,正如其名,可以读取整行,或者至少读取到一个指定的分隔符。

所以答案是否定的,getline 不符合你的需要。

但你可以使用以下方法:

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

2
我的意思是,如果它能这样工作。我在某处读到,我们需要将字符串指定为 **std::string x;**,才能使用 + 进行连接。否则,编译器会认为你正在尝试添加字符指针。这是正确的吗?还是它只是按照所述方式工作?只是想为自己澄清一下。谢谢。 - Zeeshan
2
如果您查看 带有 std::string 的 operator+() 重载列表,您会发现只要其中一个参数是 std::string,它就可以工作。没有什么魔法 :) 但是,如果您使用 char* 调用 +,它将无法工作。 - Johan

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();    

3

你应该按照以下步骤进行:

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

这将给你“name”中的“joht”,然后获取下一个标记。
temp = strtok(NULL, " ");

temp将包含"smith"。然后您应该使用字符串拼接将temp附加到名称末尾,如下所示:

strcat(name, temp);

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

1
strtok()更像是C语言的解决方案。最好将新用户引入STL概念。 - Shipof123

-1

你可以使用以下代码从文件中使用getline。 这个代码会读取整行文本。然后你可以使用while循环来遍历所有行:while (ins);

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

这似乎并没有回答问题,请尝试添加更多信息来适当地回答问题。 - Sylvaus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接