instream 的 cin 、cin.getline()、cin.get()的区别

instream 的 cin

cin使用的时候出现的问题

cin 等待用户输入的时候会使用空白(空格、制表符、和换行符)来确认字符串的结束位置。
如:输入一个Alan Dreeb,那么遇到空格了,Alan被赋值给第一个变量,Dreeb被赋值给第二个变量。

int main()
{
    char name[20];
    char favorite[20];
    cout << "enter your name:\n";
    cin >> name;
    cout >> "enter your favorite:\n";
    cin >> favorite;
    cout << "name: "<< name << endl ;
    cout << "favorite: "<< favorite;
}

    输出结果:
    enter your name :
    Alan Yao
    enter your favorite :
    name : Alan 
    favorite: Yao

只给你输入一个name,原因,首先Alan Yao,当cin读取到空格,认为已经结束了,所以在Alan后面添加\0。当程序运行到 cin >> favorite,程序读取到Yao,所有把Yao\0赋值给favorite。

使用cin.getline()

cin.getline()是面向行输入的,它使用的是通过回车键输入的换行符来确认结尾。里面有两个参数,第一个是要处理的变量,第二个是要读取的字符数(记住有一个空字符)。其中它是不保存换行符的,还有旧的库对这个函数支持不太友好。

int main()
{
    char name[20];
    char favorite[20];
    cout << "enter your name:\n";
    cin.getline(name,20);
    cout >> "enter your favorite:\n";
    cin.getline(favorite,20);
    cout << "name: "<< name << endl ;
    cout << "favorite: "<< favorite;
}

    输出结果:
    enter your name :
    Alan Yao
    enter your favorite :
    sport
    name : Alan Yao
    favorite: sport

使用cin.get()

为了更加好支持旧版本的c++,还有看出用户输入的是什么,检查错误更加容易一些。使用cin.get()可以更加清晰。它不再读取和丢弃换行符。参数和cin.getline()类似。

`cin.getline(name,20)==cin.get(name,20).get()`

猜你喜欢

转载自blog.csdn.net/biyongyao/article/details/78636555
今日推荐