C++ 获取线并忽略

c++ getline and ignore

本文关键字:获取 C++      更新时间:2023-10-16
任何人都可以告诉我为什么当我使用 cin.ignore(0,''(

时以下代码有效,但当我使用 cin.ignore(100, ''( 时则不行:/

#include <iostream>
using namespace std;

main () {
  char arr[100], brr[100];
  string srr;
  cout << "Enter a string : ";
  cin.clear();
  cin.ignore(0, 'n');
  cin.getline(arr, 100);
  cin.getline(brr, 100);
  cout << "brr : " << brr << endl;
  srr = string(arr);
  cout << "Converted to string : " << srr << endl;
  string find;
  cout << "Enter something to find : ";
  getline(cin, find);
  cout << endl;
  if (srr.find(find) != string::npos)
    cout << "Found ! at " << srr.find(find) << " " << endl;
  else
    cout << "Sorry ! not found :/ n";
}

当你写cin.ignore(0,'n')时,你说的是"忽略流中的字符,直到你忽略了 0 个字符或达到''"。由于您告诉流最多忽略 0 个字符,因此它不执行任何操作。

当你写cin.ignore(100, 'n')时,你说的是"忽略流中的字符,直到你忽略了 100 个字符或达到''"。可能不会有 100 个字符,所以你基本上忽略字符,直到下一个换行符。如果你仔细想想,你就忽略了其余的线条。

来自std::ignore文档

从输入流中提取和丢弃字符,直到并包括 delim。

计数 - 要提取的字符数

当你使用cin.ignore(0, 'n');时,不会提取任何内容。这是一个无所事事的电话。

使用 cin.ignore(100, 'n'); 时,将提取并丢弃最多 100 个字符或直到遇到'n'字符的所有字符。