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');
#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');