VC问题:cin.get和cin.getline的区别?

原创 2007年10月16日 11:38:00

VC问题:cin.get和cin.getline的区别?
问题一:
#include <iostream>
#include <string>
using namespace std;
void main(void)
{
string st ;
cout<<"Input st:";
getline(cin,st);
cout<<st<<endl;
}

上面这段代码,如果输入abc,那么需要按两次回车键才能显示abc(在VC6中),因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成 getline(cin,st,'s'); 即使输入的是abcsabc 那么也只会显示 abc ,因此对于上面出现的情况,有人说getline默认情况下以回车('/n')作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。也有人说这是VC6的bug,我觉得前一种解释比较合理,(ps:本人认为第一次按回车是读的结束标志,第二次按回车是结束输入的标志!)因为:

如果你输入abc(回车)abc,那么程序会显示abc,可见回车的确是函数默认的结束符。
同理1getline(cin,candybar[i].pinpai); 就是当输入一串字符串后赋值给candybar[i].pinpai,然后再按二次回车才显示在屏幕上!

问题二:
1.cin.getline是读入一行字符,比如:
#include <iostream.h>
void main()
{
char str[20];
cout<<"Input :";
cin.getline(str,20);
cout<<str<<endl;
}
当输入:abd cdrasdf g的时候就会输出:abd cdrasdf g。
2.cin.get()第一个用法,是读入一个字符。
#include <iostream.h>
void main()
{
char str;
cout<<"Input :";
str=cin.get();
cout<<str<<endl;
}
当你输入“ABAF”的时候,只会显示“A”,因为只读入了一个字符(空格也可以读入)。  

 

疑问: getline(cin,p)用法是什么?

#include<iostream>
#include<string>
using namespace std;
int main()
{string p;
 cout<<"input p:"<<endl;
 getline(cin,p);
 cout<<p<<endl;
 return 0;
}
编译成功,可是输入一行之后回车,程序没有直接输出p,而是还要你输入一行在回车才能输出p
getline(cin,p)不是从cin中读取一行,知道遇到换行符吗?为什么上面的程序不是这样的呢?
各位过路高手教教小弟。

本人的回答:第一次回车是结束读入的标志,第二次的回车是结束输入的标志

第一个回车是截断标志
第二个才是真正的结束
比如输入:
nsdkahdsh/nasjfdhjkas/n
(上面的/n是键盘输入的,好像vc6只认键盘输入的换行)
输出显示 
nsdkahdsh
第一个"/n"相当于告诉getline(),p不能再从cin中获取内容了,第二个"/n"相当于告诉告诉编译器,不能再从终端向输入流cin中输入内容了,如果没有第二个"/n",标准输入流cin的输入操作永远不会结束,在这个单线程里面,输入操作还没结束怎么进行下面的输出流的错做呢?

cin、cin.get()、getline()(讲解的很详细)黄刚的博客

黄刚的博客:cin、cin.get()、getline()(讲解的很详细) in等函数深入分析 很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解...
  • snail0428
  • snail0428
  • 2016年10月10日 21:53
  • 1324

关于cin的get()和getline()成员函数

cin是使用空白(空格,制表符,换行符)来确定字符串的结束位置这意味着cin在获取字符数组时只读取一个单词。读取该单词后cin自动在其结尾增加空字符。 这有时候很方便,有时候有使我们烦恼:如果我要输...
  • shujh_sysu
  • shujh_sysu
  • 2016年07月09日 10:45
  • 569

个人笔记(cin.getline与cin.get)

在输入流中,getline与get是两个比较早接触的function member; 在primer plus中,介绍这两个函数时,是通过例子: // instr1.cpp -- reading ...
  • hsm159
  • hsm159
  • 2016年07月22日 13:54
  • 196

C++ 读书笔记之 getline与cin.getline的区别

两个函数虽然看上去名称相同都是getline,但它们却分属于不同的类中的成员函数。 cin.getline(arr,20);的getline是输入流对象的成员函数,即istream::getline...
  • shihui512
  • shihui512
  • 2013年05月17日 14:06
  • 1629

cin.get()与cin.getline()函数讲解1

先简单说明几个语句: char s[20];  cin.get(s,20,'m'); //最后一个参数可采用默认值'\n',用法cin.get(s,20) 此句从输入流中提取字符给s,第二个参数表示数...
  • jingmiaa
  • jingmiaa
  • 2016年02月29日 21:34
  • 405

C++程序学习--cin.get()函数读取空行时的细节

在学习《C++ Primer Plus》第六版第17章P780页的程序时遇到一个小问题,这个问题困扰了我很久,直到我找到了一篇博文http://www.cnblogs.com/tonglinglian...
  • JiuHuangShan
  • JiuHuangShan
  • 2016年11月13日 19:17
  • 1305

C++中cin.get()与cin.getline()函数的比较与应用

cin读入数据遇到空格结束;并且丢弃空格符,输入遇到回车符结束,很正常。 cin.get() 该函数有三种格式:无参,一参数,二参数 即cin.get(), cin.get(char ch), ...
  • we1meng
  • we1meng
  • 2017年04月17日 10:56
  • 83

c++中输入字符串--cin.get和cin.getline用法

c++中cin输入字符串,这个跟java中的scanner对象有点像,今天来说一说cin中get()和getline()用法。首先看一段程序: const int size = 20; char ...
  • ZLK961543260
  • ZLK961543260
  • 2017年10月20日 17:38
  • 148

关于C++的cin.get()的问题

来自百度知道的一段文字 cin.get()函数本身就是输入一个字符的。比如: char s[20];  cin.get(s);就会出现编译错误, 改成;char s;  cin.get(s); ...
  • WWL919618308
  • WWL919618308
  • 2013年06月13日 15:37
  • 1503

cin>>和getline混用需谨慎

造成程序错误结果的原因是,用户输入完年龄后按回车结束输入,把“\n”留在了输入流里,而cin不会主动删除输入流内的换行符,这样换行符就被getline读取到,getline遇到换行符返回,因此程序不会...
  • u011421608
  • u011421608
  • 2015年03月24日 14:41
  • 1822
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC问题:cin.get和cin.getline的区别?
举报原因:
原因补充:

(最多只允许输入30个字)