【问题标题】:C++ Read characters in only one lineC++ 只读取一行字符
【发布时间】:2020-09-05 11:54:31
【问题描述】:

我只想读取文件第一行的字符然后停止。 以下代码在 Codeblocks 中不起作用,因为输出文件为空。 我做错了什么?

#include <fstream>
using namespace std;
ifstream cin ("test.in");
ofstream cout ("test.out");
char s;
int main()
{
while (cin>>s)
if (s=='\n')
{
cout<<"end of line"; return 0;
}
return 0;
}

【问题讨论】:

  • 你不能像这样抓住行尾。看看getline
  • 试试std::string line; std::getline(std::cin, line); 这是一个完整的例子:https://en.cppreference.com/w/cpp/string/basic_string/getline
  • 谢谢。 Getline 不工作,因为没有。该行上的字符数太高,我的代码运行时间已用完。
  • 你的线路尺寸是多少?
  • 1000000 个字符

标签: c++ end-of-line


【解决方案1】:

您的代码有很多问题,但阻止它工作的一个问题是&gt;&gt; 不能用于读取空白字符,它们只是被此运算符忽略,因此s 永远不会等于'\n'

幸运的是,想要读取一行是一个非常常见的需求,并且已经有一个函数 getline 可以做到这一点。这是您重写的程序以使用 getline 并修复了所有其他各种问题。

#include <fstream>
#include <string>

int main()
{
    std::ifstream in("test.in");
    std::ofstream out("test.out");
    std::string line;
    if (getline(in, line))
        out << "end of line\n"; 
    return 0;
}

【讨论】:

  • 谢谢,但是.getline 不工作,因为没有。该行上的字符数太高,我的代码运行时间已用完
  • @Abacus 导致超出时间限制的不是 getline,而是其余代码。
  • @Abacus 无论如何,是什么让您认为一次读取一个字符会更快?
  • 谢谢你的回答,我会用getline再试一次。但是,没有其他方法可以逐个读取字符直到行尾吗?
  • @Abacus 你可以使用in.get(),它会读取一个字符,即使它是一个空白字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
相关资源
最近更新 更多