我正在尝试用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函数在获得名称之后停止然后再“重启”以检索数字?没有操作输入文件,那是什么?
答案 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);