cin.getline()和getlin()的区别

一.getline()有两个重载版本,getline()是istream类的一个全局函数

函数原型

  • istream& getline (istream&  is, string& str, char delim);
  • istream& getline (istream&  is, string& str); 

函数调用

  • getline(cin, s)
  • getline(cin, str, '~')

1.getline()默认以换行符'\n'结束

# include<iostream>
# include<string>

using namespace std;

int main()
{
    string str,s;
    cin >> str;
    getline(cin, s);
    system("pause");
    return 0;
}

输入:one two TWO;str="one",s="two Two"

  1. cin遇到空白符(空格、制表符、回车)结束输入,并把空白符留在输入缓冲中
  2. getline()会将空格,tab键会像普通字符一样赋值给s,遇到换行符结束,并且会丢弃换行符

2.getline可以指定换行符,将'\n'保存在字符串中

# include<iostream>
# include<string>

using namespace std;

int main()
{
    string str,s;
    getline(cin, s);
    getline(cin, str, '~');
    system("pause");
    return 0;
}

输入:

one[空格]two[回车]
[回车]
three[空格]four[空格]five[回车]
six[回车]
~[回车]

结果:

s="one two",two后面的换行符丢弃,所以str="\nthree four five\nsix\n"

 

二.cin.getline(),是istream类的一个成员函数。遇到换行符或输入字符个数大于第二个参数就结束输入;也会丢弃换行符

函数原型

  • istream& getline(char* s, streamsize n);
  • istream& getline(char* s, streamsize n, char delim);

函数调用

char sz[100];

  • cin.getline(sz, 100)
  • cin.getline(sz, 100, '~')

cin.getline()的用法和getline()类似,

第一个参数:数组地址首地址

第二个参数:数组大小

第三个参数,可选:结束符

 

1.如果输入字符个数大于第二个参数时,输入的字符串过长,余下的字符会留在缓冲区,会导致cin流状态无效,不能再输入,使用cin.clear()与cin.sync()(清空缓冲区)函数可以重设cin的状态为有效。

  • cin.clear()是用来更改cin的错误状态标示符的。
  • cin.sync()是用来清除缓存区的数据流的。
posted @ 2022-07-08 09:42  小柴i  阅读(65)  评论(0编辑  收藏  举报