C++ C++;:带空格的cin到不带getline函数的字符串 我在一个看起来像学生数据库的大学项目中。 文本文件的每一行都遵循此“模型”:

C++ C++;:带空格的cin到不带getline函数的字符串 我在一个看起来像学生数据库的大学项目中。 文本文件的每一行都遵循此“模型”:,c++,string,file,whitespace,getline,C++,String,File,Whitespace,Getline,我需要读取文本文件并将所有内容存储在结构向量中,如果名称只有一个单词,我就可以这样做。 很明显,年龄是int,平均值是double,但是全名呢? 我不能只使用文件>>全名,全名是一个字符串,因为一旦出现空白,它将停止读取。getline()函数将所有内容存储在一个地方,因此我不确定该怎么办 请与这个年轻的头脑分享你的知识(x)正如许多其他人指出的,你可以用它来读字符直到一个分隔符 将这段代码作为起点: int age; std::string name; double average; //

我需要读取文本文件并将所有内容存储在结构向量中,如果名称只有一个单词,我就可以这样做。 很明显,年龄是int,平均值是double,但是全名呢? 我不能只使用
文件>>全名,全名是一个字符串,因为一旦出现空白,它将停止读取。
getline()
函数将所有内容存储在一个地方,因此我不确定该怎么办


请与这个年轻的头脑分享你的知识(x)

正如许多其他人指出的,你可以用它来读字符直到一个分隔符

将这段代码作为起点:

int age;
std::string name;
double average;

// ... Open the file which stores the data ... 

// then read every line. The loop stops if some of the reading operations fails
while ( input >> age  && 
        std::getline(input, name, ';')  &&        // consume the first ;
        std::getline(input, name, ';')  &&        // read the name
        input >> average ) {
    // do whatever you need with the data read
    cout << "age: " << age << " name: " << name << " average: " << average << '\n';
}
int年龄;
std::字符串名;
双倍平均;
// ... 打开存储数据的文件。。。
//然后读每一行。如果某些读取操作失败,循环将停止
while(输入>>年龄和
std::getline(输入,名称“;”)&&&//使用第一个;
std::getline(输入,名称“;”)&&&//读取名称
输入>>平均值){
//对读取的数据执行任何需要的操作

cout.
std::getline
可以使用自定义分隔符,那些
看起来很方便:)确实是非常类似的问题。但我不明白解决方案是什么。我不想为名称使用多个字符串,因为它可以包含可变的字数。此外,重新排列文件也不是一个选项。@melak47 Thanks!我刚刚检查了它的完整语法,我将尝试使用分隔符。@DanielMarques“确实是非常类似的问题。但我不明白解决方案是什么。”没有/没有解决方案,但在您需要的方向上做得最好。
int age;
std::string name;
double average;

// ... Open the file which stores the data ... 

// then read every line. The loop stops if some of the reading operations fails
while ( input >> age  && 
        std::getline(input, name, ';')  &&        // consume the first ;
        std::getline(input, name, ';')  &&        // read the name
        input >> average ) {
    // do whatever you need with the data read
    cout << "age: " << age << " name: " << name << " average: " << average << '\n';
}