C++ cin>> cin.get() cin.getline()

来源:互联网 发布:excel 设置数据有效性 编辑:程序博客网 时间:2024/06/06 02:30

一、cin>>

cin>>在开头遇到结束符时会忽略,下次遇到空格、换行符和制表符结束输入,并在缓冲区中留下使输入结束的结束符(Enter、Space、Tab),作为下次cin>>开头的忽略。缓冲区有残留数据,读入操作直接从缓冲区中取数据。
注意:cin>>遇到结束符后会停止读入,但是并不会丢弃该结束符,而是下次读入时会跳过结束符。

char m,n;
std::cin >> m;
std::cin >>n;
这样看来好像是读取后丢弃了

char m,n;
std::cin>>m;
std::cin.get(n);
n将是换行符 这样便好像是留在缓存区,所以是留在缓冲区的,只是下次读入会忽略。

int a,b; cin>>a>>b; 
//获取字符串char a[20]; cin>>a;//或string s;  cin>>s;    //注意遇到空格会终止读取

二、cin.get()

cin.get()获取字符,可读取空格,遇到换行终止读取,但是不会丢弃缓冲区中的换行符。注意读取单个字符时是可以读取到回车符的。自定义结束符时也不会丢弃缓冲区中的结束符。

// 获取单个字符,可以读取换行符ch=cin.get(); 输入a b[Enter],则第一次读到'a',第二次读到空格,第三次读到'b',第四次读到换行enter
// 读取19个字符,a最后一个字符'\0'(字符串结束标志)char a[20]; cin.get(a,20);    //20表示接受字符个数,cin.get(数组名,长度,结束符),默认遇到换行符停止。
cin.get(a,20);cin.get();  //由于get遇到换行符终止,但是不会丢弃换行符而是将其留在缓冲流中,这会导致下次get读取时直接终止,读取不到字符。所以使用cin.get()读取单个字符强行将换行符读取清除掉。cin.get(b,20);

三、cin.getline()

cin.getline()读取一行,可读取空格,遇到换行终止读取并将换行符从缓冲区清除掉。

char a[10]; cin.getline(a,5);  //5表示接受字符个数如果输入12345[Enter],将会读取到1234,但是如果接下来继续读取将会出错。比如使用ch=cin.get();将会读取不到5。而如果使用cin.get(a,5)则不会出现该情况。

四、string中读取方法

getline():
getline遇到换行符时停止读入,并会将换行符丢弃。
注意在getline前面使用cin时,cin会留下结束符,如果是回车(换行)符,getline将不会读取到数据。可以使用cin.ignore();忽略回车符。

cin>>a;cin.ignore();getline(cin,str);

1.cin.getline()读取的字符串是数组,getline()是string类型。
2.cin.getline()会在字符数组结尾添加’\0’,getline()不一定,跟编译器有关,不过新的C++标准C++11要求以’\0’结尾。

#include<string> string str; getline(cin,str); 

gets():

#include<string> char a[10][20]; for(int i=0; i<10; i++) {    gets(a[i]); }

getchar():

#include<string> char ch; ch=getchar();  ////不能写成getchar(ch); 
原创粉丝点击