稀土掘金 稀土掘金

举例说明如何在C++中使用cin.ignore()函数

使用cin.ignore()方法从输入缓冲区中忽略或删除单个或也许多个字母。也许我们需要删除不受欢迎的缓冲区,以便将下一个数据存储在预定的容器中,而不是前面变量的缓存中。例如,我们在输入cin命令后必须提供一个字符数组或字符串。因此,我们必须清空输入缓冲区;否则,前一个变量的缓冲区将被占用。因为前一个元素的缓冲区缺乏保留新鲜数据的空间,所以在最初的输入之后刚刚按下 "Enter "按钮就会忽略容器的下一个输入。让我们从cin.ignore()函数的例子开始,通过终端外壳启动新的C++文件。文件必须通过触摸指令和文件的名称来创建。到目前为止,Ubuntu的 "nano "编辑器已经被用来打开要编辑的文件。

例子1:

在应用nano指令时,ignore.cc文件将在编辑器中被打开。现在是时候开始我们的第一个例子了。首先,我们将看一下没有使用cin.ignore()函数的c++代码。所以,我们已经用两个头库开始了,即vector和iostream。之后就利用了命名空间。main()函数开始时声明了一个整数变量 "num "和大小为100的字符类型数组 "Str",用于存储一些字符串值。cout语句要求用户添加一个整数和一个字符串类型的值。cin语句用于将整数值放入变量 "num",cin.getline()用于获取用户输入的字符串类型的值,将其保存在 "Str "变量中,最多100个字符。接下来的cout语句被利用来打印出用户在shell上输入的整数和字符串值。

#include<iostream>

#include<vector>

using namespace std;

main() {

   int num;

   char Str[100];

   cout << "Please add one Integer and one String value:\n";

   cin >> num;

   cin.getline(Str,100); //take a string

   cout << "Number :" << num << ", String: " << Str << endl;

}

现在,代码已经被编译和执行。用户输入了两个由空格分隔的数值,即整数和字符串。这两个值都已按规定打印出来。

再次执行时,用户增加了一个值并按下了回车键。输出显示一个返回值,而字符串值为空。

在第三次执行时,用户添加了一个字符串值,但没有添加一个整数值。在回报中,输出显示数字为0,字符串为NULL。

让我们通过在cin语句后添加 "cin.ignore() "函数来更新该代码。它需要两个参数。一个是numeric_limits stream size header,用来清除第一个值之后的缓冲区缓存,一个是引人注目的新行,即"/n"。因此,下一个变量 "Str "将在用户进入下一行后获得数值。

#include<iostream>

#include<vector>

using namespace std;

main() {

   int num;

   char Str[100];

   cout << "Please add one Integer and one String value:\n";

   cin >> num;          //clear buffer before taking new line

   cin.ignore(numeric_limits<streamsize>::max(), '\n');

   cin.getline(Str,100); //take a string

   cout << "Number :" << num << ", String: " << Str << endl;

}

一个用户用一个空格添加了两个值。在按下Enter键后,一个用户又添加了一个值。结果,输出显示第一个整数值和下一行添加的字符串值。cin.ignore()会在清除缓冲区缓存后,从下一行取走空格前的第一个值和第二个值。你可以看到,它已经忽略了第一行输入的字符串值 "Ignore"。

例子2:

现在,我们来看看另一个例子。在main()函数之前加入了一些头文件。在一个函数中,while循环继续执行一些语句。三个整数变量被声明,cout语句要求在这些变量中加入输入值。cin语句将输入值保存到变量中,"if "语句用来检查第一个值是否等于0。如果是,它将立即退出程序。否则,程序继续进行。cin.ignore()语句在这里是为了在下一行之前清除缓存,而cout语句将显示输入的值。

#include <iostream>

#include <sstream>

#include <limits>

#include <vector>

#include <fstream>

using namespace std;

int main() {

   while(true) {

      int n1, n2, n3;

      cout << "Please Type Space-separated 3 Numbers: " << endl;

      cin >> n1 >> n2 >> n3;

      if (n1 == 0) exit(EXIT_SUCCESS);

      cin.ignore(numeric_limits<std::streamsize>::max(), '\n');

      cout <<"1st: "<<n1<<" , 2nd:"<<n2<<" , 3rd: "<< n3<<endl;

   }

   return EXIT_SUCCESS;

}

在执行这个代码例子后,用户已经添加了三个值。第一个值不是0,它将显示第1、2、3个。"while "循环再次继续,用户添加0作为第1个整数值。作为回报,程序退出,没有进一步执行。

例子3:

最后一个例子是将用户输入的两个字符类型的变量作为输入。在两行cin.get()取值之间,我们利用了cin.ignore()函数在遇到空格时清除缓冲区缓存。如果用户添加了任何字符串,cin.get()将只取其初始值,cout将显示它,如下代码。

#include <iostream>

#include <sstream>

#include <limits>

#include <vector>

#include <fstream>

using namespace std;

int main() {

      char v1, v2;

      cout << "Type Two words: " << endl;

      v1 = cin.get();

      cin.ignore(numeric_limits<std::streamsize>::max(), ' ');

      v2 = cin.get();

      cout << "Initials of both words are: "<<v1<<v2<<endl;

   return EXIT_SUCCESS;

}

执行后,用户添加了两个词,而cout语句只显示首字母。

结论

所以,这就是关于在C++中使用cin.ignore()函数来清除缓存缓冲区的全部内容。我们使用了空格和下一行字符作为分隔符。所实现的例子是相当容易学习和理解的。

玻璃钢生产厂家温州大型玻璃钢花盆中牟玻璃钢雕塑定制广西卡通玻璃钢雕塑美陈装饰杭州玻璃钢景观雕塑厂家报价新密房地产水景玻璃钢仿铜雕塑重庆玻璃钢雕塑加工新乡镂空校园玻璃钢景观雕塑长沙佛像玻璃钢彩绘雕塑厂家潮州玻璃钢女神人物雕塑厂家六安水果玻璃钢雕塑销售电话商场美陈报道昆明商场美陈仓库10平米玻璃钢雕塑深圳常见商场美陈销售厂家奥体夏季商场美陈不锈钢人物玻璃钢雕塑制造天津玻璃钢冰棒雕塑安徽玻璃钢雕塑钦州玻璃钢花盆端州玻璃钢抽象雕塑价格玻璃钢雕塑制作视频流程湖州人物玻璃钢雕塑儿童乐园玻璃钢雕塑厂周口大象玻璃钢雕塑茂名玻璃钢佛像雕塑厂六安玻璃钢花盆舟山玻璃钢移动玻璃钢花盆曲阳捷祥玻璃钢雕塑铜梁玻璃钢雕塑梅州玻璃钢仿铜人物雕塑厂香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化