c++ - C++ 中的 Ignore() 函数使用问题
问题描述
#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()
and 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()
之后在下一个换行符处结束,因为没有要读取的字符。
在您的第三个示例中,ignore()
不带参数的调用将仅跳过 1 个字符,即 之后的换行符6
,将其余字符留给gautam goyal
读取getline()
到下一个换行符。
当忽略直到下一个换行符的字符时,无论有多少字符,请改用:
#include <limits>
cin.ignore(numeric_limits<streamsize>::max(), '\n');
推荐阅读
- javascript - 使用角度 e2e 测试时与 gojs 画布交互
- matlab - 为 MATLAB 使用 (libccd) 共享库
- php - 删除 nginx 中 request_uri 添加的不需要的斜杠
- html - 我可以使用 tab 来聚焦 ap:inplace 组件,以便屏幕阅读器可以读取元素吗?
- facet-wrap - 想用 facet_wrap 按年份分割连续折线图
- kotlin - 如何将我的 ios 应用程序连接到 AndroidStudio 以在模拟或真实设备上运行它?
- ios - Viewcontroller 在第二次调用时不起作用
- c++ - 如何处理圆图的Datachange信号?
- node.js - NodeJS:访问表单数据
- kubernetes - Prometheus pod crashlooping 错误“打开存储失败”