编程论坛
注册
登录
编程论坛
→
C++教室
一个关于C++中输入操作符>>方面的问题
lxqlyld
发布于 2012-08-08 08:40, 685 次点击
在看书时遇到这么一个现象,
char ch;
请问cin>>ch;和cin.get(ch);两者之间有什么区别。非常感谢各位
8 回复
#2
peach5460
2012-08-08 08:41
>>只是一个流运算符
get是个函数
我是这么认为的
#3
peach5460
2012-08-08 08:41
就像if else和? :
#4
pangding
2012-08-08 11:06
如果是 char 类型的话,>> 和 get() 在行为上就没有什么区别。
在可读性方面:后者在表明“要读一个字符”这样的概念时,显得更清晰。
从概念上讲,前者是格式化的输入函数,后者是非格式化的。
#5
jarryjsq
2012-08-08 14:35
get跟getline函数还可以用来读入一行数据,当然他们2个之间也有一点差别。
#6
humy
2012-08-08 14:45
回复 4楼 pangding
前者是格式化的输入函数,后者是非格式化的
是什么意思呢?
谢谢
#7
humy
2012-08-08 14:55
cin.get()函数本身就是输入一个字符的。比如:
char s[20];
cin.get(s);就会出现编译错误,
改成;char s;
cin.get(s);
就对了
关于cin.get()与cin>>s;的区别就是前者不会忽略空格,回车键,、会把他们当作字符了处理,如:cin.get(s);要是输入:空格 a,那里,字符变量s的值就是一个空格,字符a则会存在缓冲区了。要是用cin>>s,它会忽略空格、、、直到有字符输入为止。如;输入:空格 a,那么字符变量s的值就是‘a’了。
举例:
1、cin>>
用法1:最基本,也是最常用的用法,输入一个数字:
#include <iostream>
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}
输入:2[回车]3[回车]
输出:5
用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束
#include <iostream>
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}
输入:jkljkljkl
输出:jkljkljkl
输入:jkljkl jkljkl //遇空格结束
输出:jkljkl
2、cin.get()
用法1: cin.get(字符变量名)可以用来接收字符
#include <iostream>
using namespace std;
main ()
{
char ch;
ch=cin.get(); //或者cin.get(ch);
cout<<ch<<endl;
}
输入:jljkljkl
输出:j
用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
#include <iostream>
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<<a<<endl;
}
输入:jkl jkl jkl
输出:jkl jkl jkl
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')
用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.
这个我还不知道怎么用,知道的前辈请赐教;
3、cin.getline() // 接受一个字符串,可以接收空格并输出
#include <iostream>
using namespace std;
main ()
{
char m[20];
cin.getline(m,5);
cout<<m<<endl;
}
输入:jkljkljkl
输出:jklj
接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;
如果把5改成20:
输入:jkljkljkl
输出:jkljkljkl
输入:jklf fjlsjf fjsdklf
输出:jklf fjlsjf fjsdklf
百度上的http://zhidao.baidu.com/question/176149464.html
#8
humy
2012-08-08 14:56
ps:我也是新手,呵呵呵,不会的问题先百度一下吧。。。。。好多的牛人回答过了
#9
pangding
2012-08-08 17:44
格式化IO,感觉在 C 语言里就有类似的概念。
在 C 语言里,具体讲,格式化IO就是指 scanf 和 printf 这两大组函数。
非格式的就是指 getc, puts 和 read write。非格式化的函数具体又可以细分,前者又叫字符IO,后者叫直接IO。
格式化的意思就是说会转化类型,对输入可能会把连续数个字符的内容读入,然后转化成比如一个 int。对输出则是,明明要输出一个 int,却被转化成了数个字符。这个转化过程称为格式化。
C++ 也继承了这个概念,>> 会根据参数的类型不同,对输入流作相应的转化。
不过对于输入,在 C++ 里从本质上讲就是格式化默认会跳过空白字符,非格式化不会。非格式化不能控制,格式化可以靠清除 skipws 位来启用读取空白。
比如:
cin
.unset(ios_base::skipws);
cin
>> ch;
1