今天拔牙去了,好疼呜呜呜
字符串输入方法
普通输入
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()读取