Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果条件c++;_C++_Getline - Fatal编程技术网

C++ 如果条件c++;

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

我看了其他例子,但我不能使这一个工作。 我有一个文件,在某些时候有奇怪的字符,例如:“Äîpg” 我不想保存这一行,因为getline的循环似乎将停止在那里(它将一直存储到包含垃圾的行)。请问我怎么做?我知道当这种情况发生时:“key=0”,下一行将有这些字符“Äîpg”

这是我的密码:

    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;