我想逐个字符地读取文件并对每个字符执行特定操作,我使用以下循环:
ifstream in
while(in)
{
ch=in.get();
//some operation
}
我不想在一段时间内阅读有条件的字符,因为光标会移动到下一个位置,我会错过那个字符。问题是文件结尾没有正确发出信号,最后一个字符被读取了两次。请提供一种避免这种情况的方法,例如。如果文件中的字符串是军队,则读取为军队(当我打印时)
char ch;
while(in.get(ch)){ } //or in>>std::noskipws>>c
将是您想要的字符存储在ch
. 那有什么问题?
如果你真的想要你想要的方式,那么你可以使用peek()
查看下一个字符并执行适当的操作:
char c = in.peek(); //this will give you the next character in the stream
//if its an eof, do appropriate
使用 get 的另一个重载:
while (in.get(ch)) {
// do something with ch
}
或者
for (char ch; in.get(ch); ) {
// do something with ch
}
您还可以使用 sscanf 读取字符。在该示例中,您可以看到 3 个输入正在从 text 读取。前两个是字符串,最后一个是浮点数。您还可以使用向量来存储值。希望这个例子对您有所帮助
std::string str;
char buf_1[50];
char buf_2[50];
while(std::getline(in, str))
{
if(sscanf(str.c_str(), "%s %s %f", buf_1, buf_2, &faceStatistics.statistics) == 3)
{
faceStatistics.faceName_1 = buf_1;
faceStatistics.faceName_2 = buf_2;
faceStat_.push_back(faceStatistics);
}
else
std::cout << "No param in string " << str << std::endl;
}
向量赋值
struct Fstat {
std::string faceName_1;
std::string faceName_2;
float statistics;
};