C++学习(五)——string使用注意事项(一)

今天编程遇到一个问题,从txt读555 111 9999,然后显示出来,结果开始程序一直只显示555;之后经过网页搜索终于找到了问题所在;

在使用getline()时,我们需要明白其原理:

getline (char* s, streamsize n, char delim );

第一个参数是存储的位置,第二个是读取的最大字符数,第三个参数是终结符,默认为'\n',你可以自行设置

你的程序里,默认使用'\n'为终结符,才导致每次读取一行的问题,根据你的输入格式,你可以用空格作为终结符,这样可以只输入一行即可。

如果,你仍然使用'\n'作为终结符(默认),而且只输入一行,你理解的是444后面没有读到,是不对的。其实是在读取555后,输入流input错误了。针对第一个getline(buf,4);默认终结符'\n',输入是555 111 9999,在读第四个字符时,判断是否是'\n',若是则结束,若不是则输入流发生错误,这是你输入过多导致。

解决方式是:在之后加上input.clear();清空输入流状态。

部分代码如下:

	int  a, ex, num;
	char buf[35];
		Input.getline(buf, 25);
		mylist[i].SetName(buf);

		Input.getline(buf, 30);
		mylist[i].SetAddress(buf);

		Input.getline(buf, 4);
		a = atoi(buf);
		Input.clear();
		Input.getline(buf, 5);
		ex = atoi(buf);
		Input.clear();
		Input.getline(buf, 7);
		num = atoi(buf);
		Input.clear();
		mylist[i].SetPhone(a, ex, num);

	cout.setf(ios::left);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值