我编写了一个代码,但是它不起作用。能帮上忙吗?在代码中,我想占一行,如果代码看到 // n ,则结束。
这是我的例子。
文件:
I love C++! //n
我的代码:
ifstream file("file.txt");
char text[250];
while(file >> text){
cout << text << " ";
if(text == "//n"){
cout << endl;
}
}
感谢您的帮助。
答案 0 :(得分:1)
我不确定您要做什么,但是似乎您想获取一行文本。如果是这样,您想更改
char text[255];
....
if(text == "//n")
到
std::string text;
...
if(text == "\n")
数组比较将不比较字符串。因此,请使用std :: string来使用==
运算符。
由于C ++特殊字符代码使用反斜杠而不是两个正斜杠。
但是,我也建议使用单个字符而不是数组(因为似乎只需要访问其中的第一个字符,因此索引似乎并不重要)。
答案 1 :(得分:1)
如果您想一次读一个文件:
ifstream file("file.txt");
std::string line;
while(std::getline(file, line)) {
std::stringstream linestream(line);
std::string word;
while(linestream >> word) {
std::cout << "Word: " << word << " ";
}
std::cout << "EOL\n";
}
基本上,您的代码有两个问题。
operator>>
将保护空格(包括\ n)。getline()
读取行但删除\ n。'\n'
也永远不会在文本中进行比较。char text[255]
可以轻松地将自身转换为指针。==
进行巧妙处理的类型,以便您比较文本。std::string
。作为良好的样式指南。
切勿在代码中加入using namespace std;
。当您只有一点简单的一次性代码时,它将引起更多的麻烦。在简单的一次性代码中使用它是一个坏习惯,有一天会赶上您。
std
(以及其他)简短而不是standard
的原因是,从标准库中为项目添加前缀并不麻烦。
std::cout << text << " "; // not hard.
std::cout << std::endl;
没有真正的理由使用std::endl
(我认为调试是个例外)。在正常情况下,它添加的额外冲洗通常会导致输出明显降低。因此,除非您特别想强制进行冲洗,否则最好使用'\n'
。
答案 2 :(得分:0)
这里的问题是,您的代码比较指针,而不是比较字符串(在其他答案中也提到):
if(text == "//n")
{
...
}
这里text
是一个指针(实际上是char
的数组,但是在这种情况下,它等效于一个指针),而"//n"
也是一个指针(也是一个数组) 。比较两个指针不是您想要的。
要修复代码以便比较字符串,代码要比较的一件事应该是字符串而不是指针。要将"//n"
标记为字符串,请在其后附加s
if(text == "//n"s)
{
...
}
这有点晦涩;另一个解决方案是使text
为字符串(如另一个答案中所述):
std::string text;