VC问题:cin.get和cin.getline的区别?
2007-10-16 11:38
411 查看
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的输入操作永远不会结束,在这个单线程里面,输入操作还没结束怎么进行下面的输出流的错做呢?
问题一:
#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.getline、getline和gets的区别
- cin.get()函数与cin.getline()函数的区别
- C++中cin.get(),cin.getLine(),getChar(),getch()的区别
- cin cin.get() cin.getline() string类成员函数getline(cin,str)使用方法区别与联系
- cin.get(), cin.getline(), getline()简单区别
- instream 的 cin 、cin.getline()、cin.get()的区别
- 解决cin.getline()未经输入就结束的问题
- cin.get( )与cin.getline( )的区别
- C/C++中,写在while循环体的cin.getline()语句执行一次问题
- cin、cin.get()和cin.getline()的用法和区别
- cin.get( )与cin.getline( )的区别
- cin.get()与cin.getline()的区别
- cin.getline()和cin.get()的区别
- 解决cin.getline()函数被跳过执行的问题(与cin连用)
- cin.get()和cin.getline()区别
- cin.get()和cin.getline()之间的区别
- cin.get( )与cin.getline( )的区别
- cin,cin.get,cin.getline的区别
- cin.getline,getline,gets 的区别个
- C++中string类的处理字符串构造函数用法, 以及getline cin.getline()输入的区别