#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
字符,按此顺序。默认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');