C++ cin>> cin.get() cin.getline() 本是古典 何须时尚 2021-06-24 15:57 281阅读 0赞 ## **一、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);
还没有评论,来说两句吧...