新线字符没有出现

时间:2018-05-23 01:41:24

标签: c++ string

最近我写了一些代码,我需要在其中识别换行符。我相信使用if(str == "")如果角色是\ n,则不会返回true,但我错了。如果使用

运行以下代码
steven 

bar

output.txt内你会得到no text at 2这没有任何意义,因为那里应该有换行符。我对编程很新,所以这里是代码。(如果我if(str == '\n')它有效,但我很好奇为什么新行字符没有被if(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");
}

2 个答案:

答案 0 :(得分:1)

根据cppreference

  

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

     

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

因此,为第二行返回的字符串为空,因为\n分隔符未附加到其中。

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

output.open("output.txt");
getline(output, line, 'n');
cout << line << endl; // outputs "steve"

而不是steven,您得到steve,因为未附加分隔符n

答案 1 :(得分:-2)

双引号“”为空字符串。新行字符与空字符串不同。 如果你写的话,让我们反过来思考

std::cout << "";

std::cout << std::endl;

第一个没有打印,光标将保持在同一行,而第二个将光标移动到下一行。