zed*_*111 0 c++ string file-io
我想从一个文件中读取.我用的代码是
ifstream is;char c;
is.open("text.txt");
while(is.good() && !isdigit(is.peek()))
{ is.get(c)
word+=c;
}
Run Code Online (Sandbox Code Playgroud)
问题是最后一个字符被读取两次(为什么?)例如,如果文件中的单词是粉红色的,那么单词的值在循环后变为粉红色请建议解决方案
您总是希望在尝试阅读后检查输入是否成功.当流不知道将要读取什么类型的值时,您首先检查.如果你想使用peek()你应该std::char_traits<char>::eof()首先测试,例如:
for (std::char_traits<char>::int_type c;
std::char_traits<char>::eof() != (c = in.peek())
&& !std::isdigit(static_cast<unsigned char>(c); ) {
...
}
Run Code Online (Sandbox Code Playgroud)
在您的设置中,我个人会使用std::istreambuf_iterator<char>它,因为它实际上更容易:
for (std::istreambuf_iterator<char> it(in), end;
it != end && !std::isdigit(static_cast<unsigned char>(*it); ++it) {
word += *it;
}
Run Code Online (Sandbox Code Playgroud)
请注意,char可能是未签名但std::isdigit()需要正值.如果char使用我的第二个名称签名通常会导致未定义的行为.为了避免这个问题char,std::isdigit()应该unsigned char首先转换为pass .