C++ 未出现新行字符

C++ 未出现新行字符,c++,string,C++,String,最近我写了一些代码,需要识别换行符。我相信如果字符是a,那么使用if(str==“”)将不会返回true,但我错了。如果您使用 steven bar 在output.txt中,您将在2处获得无文本,这毫无意义,因为那里应该有一个换行符。我对编程很熟悉,所以这里是代码。(如果我是代码),如果(STR=‘\n’)< /C>,我很好奇,为什么新行字符不被检测到(如果(STR==)”/>代码。请解释为什么C++不承认换行符是代码。 #include <iostream> #includ

最近我写了一些代码,需要识别换行符。我相信如果字符是a,那么使用
if(str==“”)
将不会返回true,但我错了。如果您使用

steven 

bar
output.txt
中,您将在2处获得
无文本,这毫无意义,因为那里应该有一个换行符。我对编程很熟悉,所以这里是代码。(如果我是代码),如果(STR=‘\n’)< /C>,我很好奇,为什么新行字符不被<代码>检测到(如果(STR==)”/>代码。请解释为什么C++不承认换行符是代码。
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>

using namespace std;

int main()
{
    ifstream output;
    string line;
    int i = 1;
    output.open("output.txt");
    while(i <= 3)
    {
        getline(output, line, '\n');
        if(line == "")
        {
            cout << "no text found at "<< i << endl;
        }
        else
        {
            cout << "text at " << i << endl;
        }
        i++;
    }
    system("PAUSE");
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
ifstream输出;
弦线;
int i=1;
output.open(“output.txt”);

而(i双引号“”是空字符串。新行字符不同于空字符串。 如果你写的话,让我们反向思考

std::cout << "";
std::cout根据:

getline
[…]从
input
中提取字符,并将其附加到
str
中,直到出现以下情况之一[…]

b) 下一个可用的输入字符是
delim
,[…],在这种情况下,分隔符是从
input
中提取的,但不会附加到
str

因此,为第2行返回的字符串为空,因为没有附加分隔符
\n


您可以通过使用可见字符作为分隔符并检查输出来确认此行为:

output.open("output.txt");
getline(output, line, 'n');
cout << line << endl; // outputs "steve"
output.open(“output.txt”);
getline(输出,行'n');

cout分隔符被丢弃。请阅读文档,例如。这与“getline”如何处理行尾无关。iZeusify询问为什么“if(str==”)检测不到换行符。因此,我想指出“”(空字符串)与“\n”(换行符)不同,但不讨论“getline”但他的问题是,他认为他们在比较平等,而他们应该比较不平等,所以很明显,他已经知道他们不是同一件事,因为这是他所期待的行为。。。
output.open("output.txt");
getline(output, line, 'n');
cout << line << endl; // outputs "steve"