C++ 如果条件c++;
我看了其他例子,但我不能使这一个工作。 我有一个文件,在某些时候有奇怪的字符,例如:“Äîpg” 我不想保存这一行,因为getline的循环似乎将停止在那里(它将一直存储到包含垃圾的行)。请问我怎么做?我知道当这种情况发生时:“key=0”,下一行将有这些字符“Äîpg” 这是我的密码:C++ 如果条件c++;,c++,getline,C++,Getline,我看了其他例子,但我不能使这一个工作。 我有一个文件,在某些时候有奇怪的字符,例如:“Äîpg” 我不想保存这一行,因为getline的循环似乎将停止在那里(它将一直存储到包含垃圾的行)。请问我怎么做?我知道当这种情况发生时:“key=0”,下一行将有这些字符“Äîpg” 这是我的密码: file = "example.log"; ifstream f(file); f.open(file); if (f.good()){ while (getli
file = "example.log";
ifstream f(file);
f.open(file);
if (f.good()){
while (getline(f, line)) {
lineNumber++;
if ((lineNumber>= line1 - 20) && (lineNumber<= line2)){
pos = line.find("key = 0");
if (pos != string::npos){
std::cout << "skip the line" << endl;
}
else{
Type v;
v.line= line;
v.index = lineNumber;
linesVector.push_back(v);
}
}
}
}
f.close();
下面是我在剪切文件中得到的:
2017-08-03 09:38:46 Expeum im6
2017-08-03 09:38:46 nubla4
2017-08-03 09:38:46 blaze
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017-08-03 09:38:46 Q2žl2p
问题是它被卡在最后一个吉伯里语中,无法继续前进!
可能是某辆马车的返程票不见了吗?我的点子快用完了。看来你想扔掉“key=0”这一行和下一行 如果是这样,您可以在嵌套的
If
-语句中使用如下语句:f.ignore(numeric\u limits::max(),'\n')
<> > <代码> Link No.<代码>应考虑这一行,您还需要添加<代码> +LeNoNo.< /代码> .<
如果这可能是文件中的最后一行,则应总共添加以下代码:
if(!f.ignore(numeric_limits<std::streamsize>::max(), '\n')) {
break;
}
++lineNumber;
if(!f.ignore(numeric_limits::max(),'\n')){
打破
}
++行号;
值得花些时间使用调试器,弄清楚“Äîpg”到底出了什么问题。它可能是一种多字符编码,其中任何一个字符都可能包含一个文件结束标记,或者由于某种原因使流处于错误状态。您好,事实上,这种情况发生在我的txt文件中。我的努力是跳过前一行中由“key=0”引导的任何行。
if(LeNoNoS>=LeN1-1和20),将修复它。如果有更多的符号,您将再次出现这个问题。如果文件格式被确定,请考虑检查有效代码,如“代码> ISALNUM < /代码> +代码> ISBLIG/<代码> +…谢谢您的答复。我担心我错过了一些东西。您是指这样的东西吗?如果(pos!=字符串::npos){std::我不能谢谢你,但仍然不起作用。它在第二次发现这些字符后会粉碎,这可能是你代码中的其他错误。你的调试器应该对此有所帮助。@user6812514我已经键入了一个示例并将其添加到了答案中,我怀疑你的line1
或line2
不是你想要的。@user6812514以下是我的建议,因为这回答了一个问题,即你如何跳过一行你应该接受的内容,然后结束这个问题。然后尝试创建一个演示你现在看到的不良行为的示例。很多时候,创建MCVE会引导你找到解决方案。如果不是这样,你应该使用MCVE创建一个new问题。
2017-08-03 09:38:46 Expeum im6
2017-08-03 09:38:46 nubla4
2017-08-03 09:38:46 blaze
2017-08-03 09:38:46 ue
2017-08-03 09:38:46 er
2017-08-03 09:38:46 key = 0
2017-08-03 09:38:46 Q2žl2p
if(!f.ignore(numeric_limits<std::streamsize>::max(), '\n')) {
break;
}
++lineNumber;