std::getline 未产生正确的输出 (C++)
std::getline not producing correct output (c++)
我正在用 c++ 做家庭作业,我可以使用一点帮助。我不明白为什么以下代码不能按我想要的方式工作。我正在创建的函数的目标是加载一个文件并将其解析为映射的键和值,同时跳过空白行和第一个字符是 hastag 的行。我正在读取的文件如下。
问题是我的nextToken
变量没有由'='
字符分隔。我的意思是,当我cout nextToken
时,它不等于'='
字符之前的字符串。例如,数据文件的前两行是
# Sample configuration/initialization file
DetailedLog=1
我认为我拥有的代码应该跳过所有以主题标签开头的行(但它只是跳过第一行),并且nextToken
只等于DetailedLog
(而不是DetailedLog=1
或仅等于1
)。
在我的输出中,一些带有主题标签的行被跳过,而有些则没有,我无法理解cout
从哪里打印,因为我拥有的cout
语句应该打印"nextToken: "
然后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
如果输入文件的前两行是:
# Sample configuration/initialization file
DetailedLog=1
然后,调用
getline(forIceCream, nextToken, '=')
将读取所有内容,直到第一个=
nextToken
.在该行的末尾,nextToken
的值将为:
# Sample configuration/initialization file
DetailedLog
请参阅std::getline
的文档并注意第一次重载。
您需要稍微更改处理文件内容的策略。
- 逐行读取文件的内容。
- 根据需要处理每行。
下面是函数的更新版本。
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;
}
}
}
}
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 为什么rk4.do_step不输出C++中的初始条件
- 输出没有重复元素的动态数组(收缩数组)C++
- 如何根据单词在文本中出现的概率输出单词