[Ignore()函数在c ++中的使用问题[重复]

问题描述 投票:0回答:1
#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以打印语句(以减少字符数),否则它会从输出中的字符串中切掉一些初始字符(如果有更多的数字,字符)。像这样:

image

image

使用cin.ignore();时,输出正确。

image

使用这两种方法都不一样,因为'\n'会丢弃换行符,()空括号也会将最后一个字符(或此处的换行符)丢掉。

而且,我们什么时候应该使用cin.getline()getline(cin, )

c++ arrays string cin getline
1个回答
1
投票

您使用的ignore()不正确。

它具有2个可选参数-最多忽略count个字符,而停止忽略delim字符,按此顺序。默认count为1,默认delim为EOF:

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开始读取,并在下一个换行符处结束。

要忽略直到下一个换行符的所有字符,无论有多少个字符,请改用此字符:

#include <limits>

cin.ignore(numeric_limits<streamsize>::max(), '\n');
© www.soinside.com 2019 - 2024. All rights reserved.