C++中getline()和get()区别

9人阅读 评论(0) 收藏 举报
分类:

笔记会随着学习过程不断更新...

第一,get遇到 '\n '字符后便返回,这是 '\n '还在缓冲区中,所以下次读出来的将是 '\n ',而getline遇到 '\n '也返回,但它会把 '\n '从缓冲区里移除掉 所以很多时候用getline方便些

 cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中,比如:

#include <iostream>
      using std::cin;
      using std::cout;
     const int SIZE = 15;
     int main()

{
cout << "Enter your name:";
char name[SIZE];
cin.get(name, SIZE);
cout << "name:" << name;
cin.get();
cout << "\nEnter your address:";
char address[SIZE];
cin.get(address, SIZE);
cout << "address:" << address;
return 0;
    }


在这个例子中,cin.get()将输入的名字读取到了name中,并将由Enter生成的换行符'\n'留在了输入队列(即输入缓冲区)中,因此下一次的cin.get()便在缓冲区中发现了'\n'并把它读取了,最后造成第二次的无法对地址的输入并读取。解决之道是在第一次调用完cin.get()以后再调用一次cin.get()把'\n'符给读取了,可以组合式地写为cin.get(name,SIZE).get();。
 

cin.getline()每次读取一整行并把由Enter键生成的换行符抛弃,如:

#include <iostream>
using std::cin;
using std::cout;
const int SIZE = 15;
int main( ){
cout << "Enter your name:";
char name[SIZE];
cin.getline(name,SIZE);
cout << "name:" << name;
cout << "\nEnter your address:";
char address[SIZE];
cin.get(address,SIZE);
cout << "address:" << address;
}

由于由Enter生成的换行符被抛弃了,所以不会影响下一次cin.get()对地址的读取。

不过有一个全局的getline,注意不是basic_istream的getline,其原型为

getline(basic_istream,   string)

这个函数很好用

可以这样

string   str;

getline(cin,   str);


第二,cin.get(字符数组,字符个数,终止字符)与cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)后指针指向有区别,比如:

01.cpp

char c[20];
int ch;
cout << "please enter a sentence;" << endl;
/*cin.getline(c, 18, 'p');  */             //'p'是终止字符,指针停在‘p’字符后面的字符起始地址  
cin.get(c, 18, 'p');                         //指针停在'p'字符起始地址处
cout << "The first part is:" << c << endl;
ch = cin.peek();
cout << " the next character(ASCII code)is:" <<ch<< endl;


知道指针的指向起始地址有什么用?有些函数比如putback()  (将字符添加到流,即指针所指位置);cin.ignore()   (从指针所指处跳过一个字符,指针跳),看谭浩强·C++程序设计第二(430页-432页)版书时候发现的,只是书里没有提这点


参考:http://www.cnblogs.com/qlwy/archive/2011/11/03/2235126.html
转载需注明出处:https://blog.csdn.net/qq_34793133/article/details/79960039
查看评论

C++中,get和getline函数的区别

cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别。 cin.get()每次读取一整行并把由Enter键生成的换行符留在...
  • suyin1993
  • suyin1993
  • 2015-10-06 17:41:44
  • 3489

c++getline和get的区别

getline()和get()这两个函数都读取一行的输入,直到达到换行符。然而不同的是gerline()将丢弃换行符,而get()将换行符保留在输入序列中。(1)getline#include us...
  • Vincentlmeng
  • Vincentlmeng
  • 2017-05-24 21:56:45
  • 2274

C++中get()和getline()的使用区别

问题一: #include #include using namespace std; void main(void) { string st ; cout getl...
  • zzjxiaozi
  • zzjxiaozi
  • 2011-08-12 10:54:08
  • 10511

C++中cin,cin.get()和cin.getline()的区别

cin:遇到空格,回车或者制表符就会结束输入,这样就导致了我们不能
  • u014662174
  • u014662174
  • 2014-04-12 23:15:20
  • 2236

C++中getline与C中scanf、gets小结

 getline()的原型是istream& getline ( istream &is , string &str , char delim ); 其中 istream &is 表示一个输入...
  • cr2066
  • cr2066
  • 2016-08-04 00:14:04
  • 781

C++输入输出的关键字:getline、get

1.cout.put():是一个重要的C++ OOP概念,可以代替“ char a = 'M'; cout
  • keith_bb
  • keith_bb
  • 2016-02-28 22:11:18
  • 1314

c++ string getline()函数 istream::get,getline函数与string getline区别 istream::read 和ostream::write

一个有用的string IO操作:getline。这个函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容到 string中,但不包括换行符...
  • vanwaals
  • vanwaals
  • 2010-07-21 18:45:00
  • 7966

C++中关于get()和getline()函数读取行的问题

1.面向行的输入:getline() getline()函数读取整行(读取格式为cin.getline()),它使用通过回车键输入的换行符来确定输入结尾。该函数有两个参数,第一个参数是用来存储输入行...
  • zjwson
  • zjwson
  • 2016-03-25 16:43:03
  • 1620

c++ getline(),get()函数笔记

写这篇blog的起因在于: function getline()在不指定休止符时,默认以换行作为休止符。 由于我的认识上的不足,一度认为 function cin.getline()的使用中将调...
  • qq_30490125
  • qq_30490125
  • 2016-05-04 15:30:10
  • 983

C++文件读写与getline()

1.ofstream 头文件:   文件不存在时会自动创建文件 当文件读写操作完成之后,我们必须将文件关闭以使文件重新变为可访问的。成员函数close(),它负责将缓存中的数据排放出来并关闭文件。这...
  • qq_26304333
  • qq_26304333
  • 2017-07-01 11:02:48
  • 389
    个人资料
    等级:
    访问量: 332
    积分: 140
    排名: 117万+
    文章存档