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