2013-03-22 82 views
0

我想从其中包含空格的文件中读取一行。尽管一切我试过,我所有的研究,似乎没有任何工作,这是我现在学尝试从文件读取空间的问题

void read_name(fstream& in_file, comp& cmp) 
{ 
    char buff[80]; 
    in_file.getline(buff, 79, '\n'); 
    in_file >> buff; 

    cout << "NAME: " << buff << endl; 

    cmp.set_name(buff); 
    in_file.getline(buff, 79); 
} 

无论出于何种原因,这仍然会读,直到它看到一个空格,然后停止。任何帮助将非常感激。我用直C++并不是那么棒,所以我很可能只是错过了一些东西。

回答

0

由于您使用的是C++,我建议您使用stl字符串而不是char数组。

std::string linestr; 
while(std::getline(input, linestr)) 
{ 
    // process line 
} 

其中输入是你的ifstream。

+1

由于我们使用的是标准C++,我建议您调用C++标准库“C++标准库”,而不是“STL”。 – 2013-03-22 18:57:02

+0

std *不是stl ...已编辑的帖子。审查它。 – CLearner 2013-03-22 22:03:19

1
in_file.getline(buff, 79, '\n'); 

那里。你读一行(假设该行不超过78个字符)。那么你为什么要这样做呢?

in_file >> buff; 

这会覆盖刚才读到的下一个单词。如果你想要下一行,那么再次调用getline。

但是最好使用std::string和自由函数std::getline,这样你就不必指定行长度。

std::string buff; 
std::getline(in_file, buff); 
+0

我试过了,但在“NAME:”void read_name(fstream&in_file,comp&cmp)后面没有打印出任何东西 std :: string line; (std :: getline(in_file,line)) if(std :: getline(in_file,line)) cout <<“NAME:”<< line << endl; } cmp.set_name(buff); in_file.getline(buff,79); } – roundtheworld 2013-03-22 19:00:52

+0

@ user1595510:然后出现其他问题,或许文件内容不符合您的期望,我不知道。没有更多信息,我无法诊断。 http://sscce.org/ – 2013-03-22 19:07:36

1

线

in_file >> buff; 

被消灭了,你刚刚从文件中读取的buff内容。 如果你用调试器浏览你的代码,看着buff的内容,那么你会看到这发生。

+0

1)这应该是一个评论,而不是答案。 2)以文本模式打开的文件(默认)用于处理线尾的差异。 – 2013-03-22 18:59:39

+0

@BenjaminLindley,公平点。将相应更正。 – Rich 2013-03-22 19:02:37