首页 文章

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

提问于
浏览
5

我想在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();

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

3 回答

  • 1

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

    所以答案是"no", getline 与您的需求不符 .

    但你可以这样做:

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

    你应该这样做:

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

    这将为您提供名称"joht"然后获取下一个令牌,

    temp = strtok(NULL, " ");
    

    temp将获得"smith" . 那么你应该使用字符串连接在名称的末尾附加temp . 如:

    strcat(name, temp);
    

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

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

相关问题