如何在while(cin>>str)跳出循环后能继续执行程序中其他的输入操作
来源:互联网 发布:拍婚纱照 知乎 编辑:程序博客网 时间:2024/06/07 15:41
今天在编写一个处理书店数据得小程序时遇到了一个问题。
程序中定义了sales_data类,也重载了符号>>
sales_data book;
sales_data trans1, trans2;
cout << "请输入销售记录(包含ISBN、销售本数、原始价格、实售价格):" << endl;
while (cin >> book)
{
cout << "ISBN、售出本数、原始价格、实售价格、折扣为:" << book << endl;
}
cout << "请输入两条ISBN相同的销售记录:" << endl;
cin >> trans1;
cin>> trans2;
上述语句期望实现的功能是:①用户通过键盘不断输入销售记录,在输入结束后系统可以打印出相关销售记录的信息
②信息打印后用户可以继续输入两条ISBN相同的销售记录然后程序继续进行判断。
我们都知道输入流对象cin输入的结束符在windows下是ctrl+z;于是乎
请输入销售记录(包含ISBN、销售本数、原始价格、实售价格):
021 2 20 16
ISBN、售出本数、原始价格、实售价格、折扣为:021 2 20 16 0.8
021 3 20 15
ISBN、售出本数、原始价格、实售价格、折扣为:021 3 20 15 0.75
^Z
请输入两条ISBN相同的销售记录:
汇总信息:ISBN、售出本数、原始价格、实售价格、折扣为 0 0 -1.#IND 0
请输入几条ISBN相同的销售记录:
没有数据
请按任意键继续. . .
通过程序运行的情况我们不难发现,虽然输入ctrl+z使程序跳出了while(cin>>book)的循环,但是它并不能继续执行循环外的输入操作也就是直接退出了程序。
//
//
那这是为什么呢?
要理清这件事首先我们要对了解的处理机制,cin遇到ctrl+z便认为输入结束,也就是不再接受键盘的输入(但是它会读取缓冲区已经存在的数据),
但是ctrl+z还是会留在缓冲区内!!!!!!
也就是说当我们输入换行+(ctrl+z)+换行后。程序跳出while循环,但是ctrl+z还在缓冲区内,当程序继续执行到
cout << "请输入两条ISBN相同的销售记录:" << endl;
cin >> trans1;
cin>> trans2;
时,当cin再去读的时候,发现缓冲区存在ctrl+z(上次跳出循环遗留下的),于是它就走了,也就是啥都没读到。所以用户也无法输入。
//
//
//
解决方法很简单
就是及时清除缓冲区
也就是在程序跳出循环后利用函数
cin.clear();
cin.ignore();
然后就OK了
sales_data book;
sales_data trans1, trans2;
cout << "请输入销售记录(包含ISBN、销售本数、原始价格、实售价格):" << endl;
while (cin >> book)
{
cout << "ISBN、售出本数、原始价格、实售价格、折扣为:" << book << endl;
}
cin.clear();
cin.ignore();
cout << "请输入两条ISBN相同的销售记录:" << endl;
cin >> trans1;
cin>> trans2;
if (compareIsbn(trans1, trans2))//两条记录相同则进行的操作
{
cout << "汇总信息:ISBN、售出本数、原始价格、实售价格、折扣为" << trans1 + trans2 << endl;
//计算卖出的本数和平均价格及折扣
}
else
cout << "两条销售的ISBN记录不同" << endl;
结果如下:
请输入销售记录(包含ISBN、销售本数、原始价格、实售价格):
021 2 20 16
ISBN、售出本数、原始价格、实售价格、折扣为:021 2 20 16 0.8
021 3 20 15
ISBN、售出本数、原始价格、实售价格、折扣为:021 3 20 15 0.75
^Z
请输入两条ISBN相同的销售记录:
021 2 20 16
021 3 20 16
汇总信息:ISBN、售出本数、原始价格、实售价格、折扣为021 5 20 16 0.8
请输入几条ISBN相同的销售记录:
021 2 20 16
021 3 10 5
^Z
有效汇总信息:ISBN、售出本数、原始价格、实售价格、折扣为:021 5 20 11.875
0.59375
请输入若干销售记录:
021 2
^Z
没有数据
请按任意键继续. . .
用户可以接续输入数据了~
- 如何在while(cin>>str)跳出循环后能继续执行程序中其他的输入操作
- 使用DoEvents从长循环中跳出后程序从何处继续执行
- 遇到一个很有趣的问题,while(ture)或者for循环出现异常,继续执行还是跳出异常
- 关于while(cin>>str)输入无法结束的问题(转+修改)
- 如何退出while(cin>>value)的循环
- while循环输入cin ,scanf()
- .net(c#)在循环语句中执行WebBrowser.Navigate();方法,每次循环等待网页加载完后继续执行的解决方案.(转载)
- while(cin>>str)无法结束的问题(转)
- 关于while(cin>>str)结束的问题 .
- C++文件结束符(Ctrl+Z)后如何继续输入(cin>>)。
- 在JAVA中,如何跳出当前的多重嵌套循环?
- 在JAVA中如何跳出当前的多重嵌套循环?
- 在JAVA中如何跳出当前的多重嵌套循环?
- 在JAVA中如何跳出当前的多重嵌套循环
- 在JAVA中如何跳出当前的多重嵌套循环?
- 在JAVA中如何跳出当前的多重嵌套循环?
- 在Java中如何跳出当前的多重循环
- 在java中如何跳出当前的多重循环嵌套?
- MySql集群知识与搭建--源自技术
- NetUtil工具类
- hdu 5044 Tree(树链剖分)
- 数据结构上机测试2-2:单链表操作B
- Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext
- 如何在while(cin>>str)跳出循环后能继续执行程序中其他的输入操作
- 大数据寻宝之关联挖掘
- spring加载properties文件顺序
- MyBatis中select语句
- AVL树常用算法算法
- CSS 文本效果(20160826-0026)
- 如何获取注册高德Key使用的SHA1值与包名?
- TextInputLayout的学习
- android sdcard 蛋疼集锦