一个小透明发现。。自己写的代码很多是因为输入的问题导致的错误。。。来理一理其中的问题。。。。
————————————————————————————————————————————————
1.C++中cin的详细用法
cin是istream类的对象
1.1cin>>
cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。
当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int a;
char b;
float c;
cin>>a>>b>>c;
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/47778fd287b34efae48da17f0b1c7955.png)
1.2String类的getline()
getline(cin,str)函数是处理string类的函数。第二个参数为string类型的变量。读入时第二个参数为string类型,而不是char*,要注意区别。使用时,#include <string>。
getline()函数的定义如下所示
1. istream& getline ( istream &is , string &str , char delim );
2. istream& getline ( istream &is , string &str );
is 进行读入操作的输入流,str 用来存储读入的内容,delim 终结符,遇到该字符停止读取操作,不写的话默认为回车。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv) {
string str;
getline(cin,str,'!');
cout<<str<<endl;
/*getline()它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。
1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。*/
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/5117e4baddd5c3c2d33d8c79c11f9247.png)
1.3cin.getline()
cin.getline()函数是处理数组字符串的,其原型为cin.getline(char * , int),第一个参数为一个char指针,第二个参数为数组字符串长度。
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
char c[20];
cin.getline(c,4);
for(int i=0;i<20;i++)
{
cout<<c[i];
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/c69fd27e8c71a1d9ac4def6925ae59ec.png)
1.4 cin.get()
cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别。
cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中,然而cin.getline()每次读取一整行并把由Enter键生成的换行符抛弃,cin.getline不会将结束符或者换行符残留在输入缓冲区中。
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
char name[20];
char school[20];
cin.getline(name,10);//读入9个字符
cout<<name;
cout<<"_________________";
cin.get(school,6);
cin.get(school,6);
cout<<school<<endl;
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/78deef088932b753381beb9a006cc977.png)