最近终于把三种输入方式搞明白了,记下来。
cin
> char n1[20];
> char n2[20];
> cout<<"Enter your name: "<<endl;
> cin>>n1;
> cout<<"Enter your school: "<<endl;
> cin>>n2;
> cout<< "your name is "<<n1<<endl;
> cout<<"your school is"<<n1<<endl;
运行情况1:
> Enter your name:
> **Taylor Swift**
> Enter your school:
> your name is Taylor;
> your school is swift
分析:cin 使用空白(空格、制表符、换行符)来确定字符串的结束位置,所以我们在还没有对“输入学校”做出反应,程序就把他显示出来了,taylor 后面的空格 结束了第一次输入后,把taylor 放到n1中,并自动在结尾添加空字符(‘\0’)
cin 把第一个单词读取完后,把 空格swift回车 留在输入队列中,而下面cin>>n2 的输入会过滤掉不可见的字符(指空格,制表符,回车),首先把 空格 过滤,然后把 swift 放到n2中,遇见回车 结束。(关于cin的读入规则,要把前面这加粗的三句话理清楚,就没问题了!)
geline() 和 get()
istream中的类(如cin)提供了面向行的类成员函数:getline() get() 他们都以换行符作为结束,但是getline()会丢弃换行符,get()会把换行符保留在输入队列中
1、getline() 读取字符数组
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
char name[20];
cin.getline(name,20);
2、getline() 读取string对象
(1) istream& getline (istream& is, string& str, char delim);
(2) istream& getline (istream& is, string& str);
string str;
getline(cin,str);
3、 get()
char name[20];
char sch[20];
cin.get(name,20);
cin.get();//读取下一个字符串(即使是换行符),用它来处理换行符
cin.get(sch,20);