c++——ignore()函数

cin.ignore()函数是C++标准输入流(cin)中的一个方法。cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch )。它表示从输入流 cin 中提取字符,提取的字符被忽略,不被使用。而每抛弃一个字符,它都要进行计数和比较字符:如果计数值达到 a 或者被抛弃的字符是 ch ,则cin.ignore() 函数执行终止;否则,它继续等待。

它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。例如可以这么用,cin.ignore(1024, ‘\n’),通常把第一个参数设置得足够大,这样实际上是为了只有第二个参数 ‘\n’ 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲流中清除出去。

如果默认不给参数的话,默认参数为cin.ignore(1, EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。

下面用一个例子简单说明cin.ignore()函数的用法:

比如我们要求接受输入一个字符串(没有空格),然后输出该字符串。C++代码如下:

复制代码

1 #include <iostream>  
 2 using namespace std;  
 3   
 4 int main()  
 5 {  
 6     char str[30];  
 7     cout << "请输入一个字符串:";  
 8     cin >> str;  
 9     cout << str << endl;  
10   
11     return 0;  
12 }  

复制代码
运行如下图:

在这里插入图片描述

当按下任意键时,运行程序会立即退出。如果想让程序停留一下,不要立即退出。我们很容易想到让程序末尾再接受一个输入,输入任意一个字符后程序退出。因此,我们在原先代码加上一个输入即cin.get(),代码如下:

复制代码

1 #include <iostream>  
 2 using namespace std;  
 3   
 4 int main()  
 5 {  
 6     char str[30];  
 7     cout << "请输入一个字符串:";  
 8     cin >> str;  
 9     cout << str << endl;  
10   
11     cout << "请输入任意字符结束程序!\n";  
12     cin.get();  
13   
14     return 0;  
15 }  

复制代码
此时运行如下图:

在这里插入图片描述

按下任意键程序仍然会立即退出而不停留,这与我们想要的结果不一致。这是为什么呢?

如果在程序末尾再多接受一个输入,即在代码上再加一个cin.get(),再次运行如下图:

在这里插入图片描述

此时输入字符 a 时,程序没有立即退出,达到了我们预计的要求。

回过头来想,为什么加入第一个cin.get()不行呢?那肯定是因为第一个cin.get()获取了某个字符,仔细考虑一下,不难想到当输入"hello"过后按下了回车键,因而第一个cin.get()获取到的就是 ‘\n’ 。在不加入第二个cin.get()情况下,我们可以想到用cin.ignore()函数,将cin中提取的 ‘\n’ 忽略掉。具体代码如下:

复制代码

 1 #include <iostream>  
 2 using namespace std;  
 3   
 4 int main()  
 5 {  
 6     char str[30];  
 7     cout << "请输入一个字符串:";  
 8     cin >> str;  
 9     cout << str << endl;  
10   
11     cin.ignore(100, '\n');  
12     cout << "请输入任意字符结束程序!\n";  
13     cin.get();  
14   
15     return 0;  
16 }  

复制代码

运行如下:
在这里插入图片描述

此时,和加入两个cin.get()一样得到相同的结果,加入cin.ignore(100, ‘\n’);这行代码的作用就是将输入"hello"过后按下的回车给忽略掉。

  • 14
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ifstream的ignore函数是用于输入流的。它的功能是读取字符,直到已经读取了指定数量的字符或者遇到指定的终止字符时提前结束。该函数的调用形式为ifstream.ignore(num, delim),其中num表示要读取的字符数量,默认为1,delim表示终止字符,默认为EOF(文件结束符)。函数会跳过输入流中的n个字符,或者在遇到指定的终止字符时提前结束,并跳过包括终止字符在内的若干字符。 例如,可以使用cin.ignore()来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。常用的方式是使用cin.ignore(1024, '\n')来清除输入缓冲区中回车之前的所有字符。此时,将回车(包括回车)之前的所有字符从输入缓冲中清除出去。 请注意,如果不给ignore函数传递参数,则默认参数为cin.ignore(1, EOF),即清除EOF前的一个字符。如果没有遇到EOF,函数将清除一个字符然后结束,因此每次调用都会少一个字符。 总结来说,ifstream的ignore函数用于输入流,可以用于跳过指定数量的字符或者在遇到指定的终止字符时提前结束。常用的场景是清除输入缓冲区的内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C语言中的ignore](https://blog.csdn.net/SMF0504/article/details/51362683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [学生成绩管理系统C++](https://download.csdn.net/download/ljr915/1896204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值