C++ 中的 Ignore() 函数使用问题

Ignore() function usage issue in c++

#include <iostream>
#include <ios> 
#include <limits>

using namespace std;

int main() {
   int x;
   char str[80];
   cout << "Enter a number and a string:\n";
   cin >> x;
   cin.ignore('\n');

   cin.getline(str,80); 
   cout << "You have entered:\n";
   cout << x << endl;
   cout << str << endl;
}

我在使用忽略功能时遇到问题 cin.ignore('\n'); 导致我必须多次按 Enter 以打印语句(以减少字符数)的输出,否则它会从我的字符串中删除一些初始字符输出(如果字符数更多)。像这样:

使用 cin.ignore(); 时会产生正确的输出。

使用其中任何一个不是一样的吗,因为 '\n' 丢弃换行符,() 空括号也丢弃最后一个字符(或此处的换行符)。

还有,什么时候用cin.getline()getline(cin, )

您使用的 ignore() 不正确。

它有 2 个可选参数 - 要忽略的最多 count 个字符,以及要停止忽略的 delim 个字符,按此顺序

basic_istream& ignore( std::streamsize count = 1, int_type delim = Traits::eof() );

ignore() 将跳过字符,直到遇到 delim 或达到 count,以先发生者为准。

您将 '\n' 传递给 count 参数,而不是 delim 参数。 '\n' 转换为整数时的数值为 10。所以你告诉 ignore() 跳过 10 个字符。

在您的第一个示例中,即 6 之后的换行符,后跟接下来的 9 个字符 gautamgoy。因此 getline() 之后从 al 处开始读取并在下一个换行符处结束。

在您的第二个示例中,这是 4 之后的换行符,然后是接下来的 6 个字符 grgzed,然后是接下来的 3 个换行符。因此 getline() 随后在下一个换行符处结束,因为没有字符可读。

在您的第 3 个示例中,调用不带参数的 ignore() 将仅跳过 1 个字符,即 6 之后的换行符,为 [=25] 保留其余字符 gautam goyal =] 阅读到下一个换行符。

当忽略下一个换行符之前的字符时,无论有多少个字符,请改用:

#include <limits>

cin.ignore(numeric_limits<streamsize>::max(), '\n');