c++学习笔记(六)

今天拔牙去了,好疼呜呜呜

字符串输入方法

普通输入
cin每次只识别一个单词,也就是说如果你中间输入空格了,他只记录空格之前的东西
例子如下:

#include<iostream>
int main(){
    using namespace std;
    const int Arsize = 20;
    char name[Arsize];
    char dessert[Arsize];
    cout<<"Enter your name\n";
    cin>>name;
    cout<<"enter yr favorite dessert:\n";
    cin>>dessert;
	cout <<"I have some delicious "<<dessert;
    cout<<" for you,"<<name<<".\n";
    return 0;
}

输出结果是
Enter your name
Alistair Dreeb
enter yr favorite dessert:
I have some delicious Dreeb for you,Alistair.
面向行的输入
在上述代码中把cin稍作修改

const int Arsize = 20;
    char name[Arsize];
    char dessert[Arsize];
    cout<<"Enter your name\n";
    cin.getline(name,Arsize);
    cout<<"enter yr favorite dessert:\n";
    cin.getline(dessert,Arsize);
	cout <<"I have some delicious "<<dessert;
    cout<<" for you,"<<name<<".\n";

cin.getline()函数可以自定义读取数据的长度,而剩下的将被下一次cin所读取
格式为
cin(要写入的变量,长度)
最后的输出为
输出结果
他的原理是会把用户输入的换行符替换成空字符,插入到末尾,也就是按enter和到达指定的输入数量就结束读取,剩下的留给下一次cin
另一种输入方式是cin.get()
他和cin.getlin()的区别是,get并不再读取和丢弃换行符,而是将其留在输入队列中
还可以get后面再跟get
现在把代码改成这样

	const int Arsize = 20;
    char name[Arsize];
    char dessert[Arsize];
    cout<<"Enter your name\n";
    cin.get(name,Arsize).get(); 
    cout<<"enter yr favorite dessert:\n";
    cin.get(dessert,Arsize).get();
	cout <<"I have some delicious "<<dessert;
    cout<<" for you,"<<name<<".\n";

如果只用一个get,基本上只有字符超出20个的范围才会把 剩下的传给dessert不然就全部传给name
这是因为get这个函数他不会跳过换行符,如果输入了换行符的化那么前面的整体会被视作一部分,而单独的get呢是读取了一个字符
这么看来整个情况可以这么理解:
第一次如果你只输入了cin.get(name,Arsize)那么,当你回车的时候,其实回车已经被保存到了第二次的get里,所以会直接输出。而加了.get()之后,相当于是吸收了后面的换行符,这样就可以了

混合输入字符串和数字

cout<<"What year was your house built?\n";
	int year;
	(cin>>year).get();
	cout<<"WHAT is its street address?\n";
	char address[80];
	cin.get(address,80);
	cout<<"Year built:"<<year<<endl;
	cout<<"ADDRESS:"<<address<<endl;
	return 0;

在这里,第一次如果只输入cin>>year,那么余下的换行符会放在输入队列后,再要输入address就会失败,因为换行符被留在了第二次的cin,想要正常输入要用get()读取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值