c ++ getline并忽略

时间:2018-04-08 18:40:40

标签: c++ cin getline

任何人都可以请告诉我为什么以下代码有效,当我使用 cin.ignore(0,'\ n')但是当我使用 cin.ignore时(100) ,'\ n'):/

#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";
}

2 个答案:

答案 0 :(得分:1)

当你写cin.ignore(0,'\n')时,你会说&#34;忽略流中的字符,直到你忽略了0个字符或者你到达了&#39; \ n&#39;&#34;&#39 ;。由于您告诉流忽略最多0个字符,因此它什么都不做。

当您撰写cin.ignore(100, '\n')时,您正在说&#34;忽略流中的字符,直到您忽略了100个字符或者您已达到&#39; \ n&#39;&#34 ;。可能不会有100个字符,因此您在下一个换行符之前基本上忽略了字符。如果你考虑一下,你就会忽略其余部分。

答案 1 :(得分:0)

来自std::ignore documentation

  

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

     

...

     

count - 要提取的字符数

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

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