0

我想逐个字符地读取文件并对每个字符执行特定操作,我使用以下循环:

 ifstream in
 while(in)
 {
    ch=in.get();
    //some operation
  }

我不想在一段时间内阅读有条件的字符,因为光标会移动到下一个位置,我会错过那个字符。问题是文件结尾没有正确发出信号,最后一个字符被读取了两次。请提供一种避免这种情况的方法,例如。如果文件中的字符串是军队,则读取为军队(当我打印时)

4

3 回答 3

2
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
于 2013-09-03T04:51:56.157 回答
0

使用 get 的另一个重载:

while (in.get(ch)) {
  // do something with ch
}

或者

for (char ch; in.get(ch); ) {
  // do something with ch
}
于 2013-09-03T04:53:31.227 回答
0

您还可以使用 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;
};
于 2013-09-03T05:46:39.853 回答