std :: getline不会产生正确的输出(c ++)

By simon at 2018-02-28 • 0人收藏 • 71人看过

我正在做c ++的家庭作业,我可以使用一些帮助。我不是 理解为什么下面的代码不工作克,因为我想要它。的对象 我创建的函数是加载一个文件并将其解析为键和值 在跳过时查看地图ping空白行和第一个字符为a的行 井号。我正在阅读的文件如下。 问题是我的nextToken变量没有被分隔 '='字符。我的意思是,当我cout nextToken,它不等于 海峡在'='字符之前。例如,前两行 数据文件是

# Sample configuration/initialization file 
DetailedLog=1
我认为鳕鱼e我应该跳过所有以a开头的行 哈希标签(但它只是跳过第一行)和nextToken would 等于DetailedLog(相对于DetailedLog=1或仅仅等于 1)。 在我的输出中,有一些带有hashtag的行被跳过,而有些不是和我 自
bool loadFile (string filename){
    ifstream forIceCream(filename);
    string nextToken;
    if (forIceCream.is_open()){
        while (getline(forIceCream, nextToken, '=')) {
            if (nextToken.empty() || nextToken[0] == '#') {
                continue;
            }
            cout << "nextToken: " << nextToken << endl;
        }
    }
}
08以来无法了解cout正在从哪里打印 声明一应该打印
bool loadFile (string filename){
    ifstream forIceCream(filename);
    string nextToken;
    if (forIceCream.is_open()){
        while (getline(forIceCream, nextToken, '=')) {
            if (nextToken.empty() || nextToken[0] == '#') {
                continue;
            }
            cout << "nextToken: " << nextToken << endl;
        }
    }
}
49然后nextToken,但是 打印nextToken然后"nextToken: "然后会发生什么之后 '='来自数据文件的字符。 这是我的代码:
bool loadFile (string filename){
    ifstream forIceCream(filename);
    string nextToken;
    if (forIceCream.is_open()){
        while (getline(forIceCream, nextToken, '=')) {
            if (nextToken.empty() || nextToken[0] == '#') {
                continue;
            }
            cout << "nextToken: " << nextToken << endl;
        }
    }
}
数据文件读取来自:
# Sample configuration/initialization file

DetailedLog=1

RunStatus=1

StatusPort=6090

StatusRefresh=10

Archive=1

LogFile=/tmp/logfile.txt

Version=0.1

ServerName=Unknown

FileServer=0

# IP addresses

PrimaryIP=192.168.0.13

SecondaryIP=192.168.0.10

# Random comment

1 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

如果输入文件的前两行是:

# Sample configuration/initialization file
DetailedLog=1
然后,电话
getline(forIceCream, nextToken, '=')
将读到第一个9999的所有内容99999940至nextToken.最后 的线,nextToken的值将是:
# Sample configuration/initialization file
DetailedLog
请参阅文档 [std::getline](http://en.cppreference.com/w/cpp/string/basic_string/getline) 并注意第一次过载。 你需要改变处理文件内容的策略a 一点点。   1.逐行读取文件的内容。   2。按照您认为合适的方式处理每条线。 这里是你的函数的更新版本。
bool loadFile (string filename)
{
   ifstream forIceCream(filename);
   if (forIceCream.is_open())
   {
      // Read the file line by line.
      string line;
      while ( getline(forIceCream, line) )
      {
         // Discard empty lines and lines starting with #.
         if (line.empty() || line[0] == '#')
         {
            continue;
         }

         // Now process the line using a istringstream.
         std::istringstream str(line);
         string nextToken;
         if ( getline(str, nextToken, '=') )
         {
            cout << "nextToken: " << nextToken << endl;
         }
      }
   }
}

登录后方可回帖

Loading...