C++:cin、cin.getline()、getline()的用法

C++:cin、cin.getline()、getline()的用法

主要内容:

1、cin用法

2、cin.getline()用法

3、getline()用法

3、注意的问题

一、cin>>

用法1:输入一个数字或字符

#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

用法2:接收一个字符串,遇“空格”、“TAB”、“回车”就结束

#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkljkl jkljkl       //遇空格结束
输出:jkljkl

二、cin.getline()

用法:接收一个字符串,可以接收空格并输出

#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}

输入:jkljkljkl
输出:jklj

接收5个字符到m中,其中最后一个为'',所以只看到4个字符输出

如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl

输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf

延伸:
1、cin.getline()实际上有三个参数,cin.getline(接收字符串的变量,接收字符个数,结束字符)
2、当第三个参数省略时,系统默认为''
3、如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk

三、getline()

用法:接收一个字符串,可以接收空格并输出,需包含“#include<string>”

#include<iostream>
#include<string>
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl

四、注意的问题

1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过

str=" ";
getline(cin,str);

的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。

看下面一段程序:

/*-------------Basic Input/Output-------------*/
#include<iostream>
#include<string>
#include<sstream>
using namespace std;

int main(){
    int age;
    //standard input(cin)
    cout<<"Please enter an integer value as your age: ";
    cin>>age;
    cout<<"Your ager is: "<<age<<". ";
    //cin and string
    string mystr;
    cout<<"What's your name? "<<endl;
   mystr=" ";
    getline(cin,mystr);
    getline(cin,mystr);
    cout<<"Hello,"<<mystr<<". ";
    char sex;
    cout<<"Please enter a F or M as your sex: ";
    cin>>sex;
    cout<<"Your sex is: "<<sex<<endl;
    cout<<"What's your favorite team? ";
    mystr=" ";
    getline(cin,mystr);
    getline(cin,mystr);
    cout<<"I like "<<mystr<<". ";

    system("pause");
    return 0;
}

运行结果为:

image

如果不添加红色代码,则运行结果为:

image

为了解决上面留在队列中的不想要的字符,我们可以通过两个方法解决
第一个是吃掉这个字符,调用一次cin.get()
第二个是掉过这个字符,调用一次cin.ignore();

istream & istream::get(char *, int, char = ' ');
istream & istream::getline(char *, int, char = ' ');
作用: 从文本中提取指定个数的字符串, 并在串数组末尾添加一个空字符.
区别: get() 不从流中提取终止字符, 终止字符仍在输入流中. getline() 从流中提取终止字符, 但终止字符被丢弃.

原文地址:https://www.cnblogs.com/lsgxeva/p/7953613.html