恩,今天是被cin.get()戏弄。

从文件中读取数据,动态分配结构数组,然后根据捐款金额分类。。

~~遇到字母与数字的交叉时,一定要注意cin.get()的使用!!!!!

//P201 课后程序练习9
//从文件读入数据+分类存放+infile.get()陷阱
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
const int SIZE=30;
struct donation 
{
	string name;
	double money;
};

int main()
{
	ifstream infile;
	char filename[SIZE];
	cout<<"Enter name of file:  ";
	cin.getline(filename,SIZE);
	infile.open(filename);
	if (!infile.is_open())
	{
		cout<<"Could not open the file"<<filename<<endl;
		cout<<"Program terminating.\n";
		exit(EXIT_FAILURE);
	}
	
	<pre name="code" class="cpp">        int number;
	infile>>number;
	<span style="color:#ff0000;">infile.get();</span>
	donation *members=new donation[number];
	cout<<endl<<"Grand Patrons: \n";

for (int k=0;k<number;++k){getline(infile,members[k].name);infile>>members[k].money; infile.get();}int count1=0;for (int j=0;j<number;++j){if (members[j].money>10000){++count1;cout<<members[j].name<<"\t"<<members[j].money<<endl;}}if (count1==0) cout<<"none.\n";cout<<endl<<"Patrons: \n";int count2=0;for (int j=0;j<number;++j){if (members[j].money<=10000){++count2;cout<<members[j].name<<"\t"<<members[j].money<<endl;}}if (count2==0) cout<<"none.\n";delete [] members;infile.close();system("pause");return 0;}

 
</pre><p></p><p>filename :</p><p>4<br />Sam Stone<br />20000<br />Freida Flass<br />100500<br />Tammy Tubbs<br />50000<br />Rich Raptor<br />55000</p><p>~~~~~~~~~~~~~</p><p>第一次忘记cin.get()是在人数4到Sam之间。</p><p></p><pre name="code" class="cpp">        int number;
	infile>>number;
	infile.get();
	donation *members=new donation[number];
	cout<<endl<<"Grand Patrons: \n";
第二次忘记cin.get()是在金额与姓名之前。

for (int k=0;k<number;++k)
	{
		getline(infile,members[k].name);
		infile>>members[k].money;
		infile.get();

~~~~~~~~~~~~~~~~

养成 open ,close; new ,delete好习惯


cin.get

getline

cin.getline

cin

输入缓存。

~~~~~~~~~~~~~~~~~

cin.get()是保留回车在输入流队列中的.而cin是丢弃回车的.
也就是说,

cin自动跳过输入的空格,如果你要把键盘上输入的每个字符 包括空格和回车键都作为一个输入字符给字符型变量时,必须使用函数cin.get()。
有时,可用cin来避开cin.get()问题。

cin.getline()按行读取。char字符串时:(name,SIZE);string时:getline(cin,str)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值