一、忽略输入流中的字符
在C++中,我们可以通过cin.get()函数来读取输入流中的一个字符,而cin.ignore()则可以帮助我们忽略输入流中的字符。该函数的基本语法如下:
cin.ignore([n], [delim]);
其中,n为要忽略的字符数;delim为要忽略的结束字符,可以省略。如果省略delim,则函数默认忽略换行符(”\n”)。
比如说,我们可以使用以下代码从输入流中获取一个整数,并忽略输入流中的前5个字符:
int num; cin.ignore(5); cin >> num;
在执行上述代码时,输入流中前5个字符(包括空格、换行符等)会被忽略,然后程序会读取输入流中的下一个整数并赋值给num。
二、舍弃输入流的残留字符
除了可以通过忽略特定字符数来达到舍弃输入流部分字符的目的外,cin.ignore()还可以帮助我们舍弃输入流中的残留字符。
比如说,如果我们在从输入流中读取字符串后,想要移除剩余的字符,可以使用以下代码:
string str; cin >> str; cin.ignore(10000, '\n'); // 忽略10000个字符或遇到换行符
上述代码中,cin.ignore(10000, ‘\n’)忽略了输入流中接下来的10000个字符或者遇到换行符,以此达到清空输入流的目的。
三、避免cin.get()遗留的换行符问题
如果在代码中先使用了cin.get()函数获取一个字符,再使用getline()函数获取一行字符串,会遇到如下问题:由于cin.get()函数会把最后的换行符留在输入流中,getline()函数接收到这个换行符时就会认为输入结束了,从而无法正常读取字符串。
这时,我们就可以使用cin.ignore()函数来忽略输入流中的换行符:
char ch; cin.get(ch); cin.ignore(10000, '\n'); // 忽略输入流中的换行符 string str; getline(cin, str);
使用cin.ignore()函数可以避免一些由于换行符问题带来的预料之外的程序行为。
四、防范输入流中的垃圾字符
当我们从输入流中读取数字或字符串时,经常会遇到一些输入错误的情况。比如说,用户可能会在输入数字时不小心输入了一个字符,或者输入了一些超出范围的数字。这时,cin.ignore()也可以帮助我们处理这种情况。
以读取一个整数为例:
int num; while (!(cin >> num)) { cin.clear(); // 清空输入标志位 cin.ignore(10000, '\n'); // 忽略输入流中的字符,包括换行符 cout << "请输入一个整数:" << endl; }
如果用户输入了一个非数字字符,cin >> num的值将为0,可以使用while循环和cin.ignore()函数来处理这种情况。cin.clear()可以清空输入流标志位,避免上述代码死循环。
原创文章,作者:UKSW,如若转载,请注明出处:https://www.506064.com/n/134534.html