【发布时间】:2015-02-16 15:20:38
【问题描述】:
我基本上是在读取.txt 文件并存储值。
例如:
Student- Mark
Tennis
它将Mark作为studentName存储到内存中。
现在...如果只是
Student-
Tennis
然后它会正常工作并产生错误。
但是,如果文件看起来像这样
Student-(space)(nothing here)
Tennis
它将Tennis 以studentName 的形式存储到内存中,但实际上它不应该存储任何内容并产生错误。我使用'\n' 字符来确定- 字符之后是否有任何内容。这是我的代码...
istream& operator>> (istream& is, Student& student)
{
is.get(buffer,200,'-');
is.get(ch);
if(is.peek() == '\n')
{
cout << "Nothing there" << endl;
}
is >> ws;
is.getline(student.studentName, 75);
}
我认为这是因为is.peek() 正在识别空白,但是如果我尝试使用is >> ws 删除空白,它会删除'\n' 字符并仍将Tennis 存储为studentName。
如果有人能帮我解决这个问题,那真的意义重大。
【问题讨论】:
-
你的 is.peek() ==
\n.....如果这是真的,那么你应该从函数中返回。 -
使用 find_first_of() 函数查找第一个空格,以便您识别应该删除哪些空格。
-
考虑回车可能应该是
\n\r -
由于只想读取一行,所以使用
std::getline读取该行,然后解析。 -
@SamThers 有,但是 C++ 字符串更安全,可以让您免于管理自己的内存的负担。当按预期使用时,它们还可以防止堆栈粉碎攻击。我强烈建议您不要使用 C 风格的字符串。没有时间像现在这样做出更好的改变。 (我还要指出,比起有人说“我宁愿使用错误的工具来完成这项工作。”这会导致不必要的复杂和错误的答案。)
标签: c++ char ifstream istream peek