最近我写了一些代码,我需要在其中识别换行符。我相信使用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");
}
答案 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;
第一个没有打印,光标将保持在同一行,而第二个将光标移动到下一行。