21xrx.com
2025-04-01 17:46:52 Tuesday
文章检索 我的文章 写文章
如何在C++中读取换行符?
2023-07-06 11:34:44 深夜i     16     0
C++ 读取 换行符

在C++中读取换行符可能会带来一些困难,因为缓冲区中可能有一些其他字符或空格等。但是,有一些简单的方法可以帮助我们在C++中正确读取换行符。

首先,要读取除换行符以外的字符,可以使用 `getline()` 函数,该函数会忽略输入流中的任何空格字符,并将第一个字符串中没有读取的字符留在输入队列中。 调用 getline 函数时也会读取换行符,因此我们需要将这个换行符从输入流中删除。

下面是一个以此方式读取换行符的示例代码:

#include <iostream>
#include <string>
using namespace std;
int main() {
  string name;
  string line;
  getline(cin, name);
  getline(cin, line);
  // 删除换行符
  if (line.length() > 0 && line[line.length() - 1] == '\r') {
    line.erase(line.length() - 1);
  }
  // 输出结果
  cout << "姓名:" << name << endl;
  cout << "内容:" << line << endl;
  return 0;
}

使用 `std::cin` 将以前的输入头和换行符一起读取,使用 `getline()` 将其分配到一个字符串中,利用 `substr()` 强制分解以前的输入头和换行符。

#include <iostream>
#include <string>
using namespace std;
int main() {
  string name, temp;
  getline(std::cin, name);
  for(int i = 0; i < name.length(); ++i) { // 剔除头部多余空格
    if(name[i] == ' ') {
      name = name.substr(i + 1);
      break;
    }
  }
  getline(std::cin, temp);
  getline(std::cin, temp);
  std::cout << name << "喜欢" << temp << std::endl;
  return 0;
}

除此之外,如果想要读取任何以空格和换行符分隔的字符串,可以使用 `std::cin` 读取字符串,并手动解析它以查找换行符。其中一个常用的方法是使用 `std::getline()` 函数,该函数可以使我们检测到换行符并将其从输入缓冲区中删除,而不是将其读入到字符串中。

#include <iostream>
#include <string>
using namespace std;
int main() {
  string name;
  string content;
  cin >> name;
  getline(cin, content);
  getline(cin, content);
  cout << "Name: " << name << endl;
  cout << "Content: " << content << endl;
  return 0;
}

在读取输入时,我们需要注意总是要读取换行符,以避免行末字符被留在输入队列中。这可以通过立即读取剩余的字符,直到换行符 `'\n'` 出现,来实现。

总之,读取换行符可能有一些挑战,但使用 `getline()` 函数可以忽略中间的空格并在读取函数末尾处正确解析换行符。以上是在C++中正确读取换行符的一些方法,希望有所帮助。

  
  

评论区