| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:一个关于C++中输入操作符>>方面的问题
只看楼主 加入收藏
lxqlyld
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:116
专家分:125
注 册:2012-6-18
结帖率:85.29%
收藏
已结贴  问题点数:20 回复次数:8 
一个关于C++中输入操作符>>方面的问题
在看书时遇到这么一个现象,
char ch;
请问cin>>ch;和cin.get(ch);两者之间有什么区别。非常感谢各位
搜索更多相关主题的帖子: 看书 
2012-08-08 08:40
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:1 
>>只是一个流运算符
get是个函数

我是这么认为的

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-08-08 08:41
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:1 
就像if else和? :

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-08-08 08:41
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:4 
如果是 char 类型的话,>> 和 get() 在行为上就没有什么区别。

在可读性方面:后者在表明“要读一个字符”这样的概念时,显得更清晰。
从概念上讲,前者是格式化的输入函数,后者是非格式化的。
2012-08-08 11:06
jarryjsq
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:45
专家分:124
注 册:2011-7-11
收藏
得分:1 
get跟getline函数还可以用来读入一行数据,当然他们2个之间也有一点差别。
2012-08-08 14:35
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:1 
回复 4楼 pangding
前者是格式化的输入函数,后者是非格式化的
是什么意思呢?
谢谢
2012-08-08 14:45
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:10 
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
2012-08-08 14:55
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:1 
ps:我也是新手,呵呵呵,不会的问题先百度一下吧。。。。。好多的牛人回答过了
收到的鲜花
  • pangding2012-08-08 18:17 送鲜花  5朵   附言:为认真的孩子加油。
2012-08-08 14:56
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
格式化IO,感觉在 C 语言里就有类似的概念。
在 C 语言里,具体讲,格式化IO就是指 scanf 和 printf 这两大组函数。
非格式的就是指 getc, puts 和 read write。非格式化的函数具体又可以细分,前者又叫字符IO,后者叫直接IO。

格式化的意思就是说会转化类型,对输入可能会把连续数个字符的内容读入,然后转化成比如一个  int。对输出则是,明明要输出一个 int,却被转化成了数个字符。这个转化过程称为格式化。
C++ 也继承了这个概念,>> 会根据参数的类型不同,对输入流作相应的转化。

不过对于输入,在 C++ 里从本质上讲就是格式化默认会跳过空白字符,非格式化不会。非格式化不能控制,格式化可以靠清除 skipws 位来启用读取空白。
比如:
cin.unset(ios_base::skipws);
cin >> ch;

2012-08-08 17:44
快速回复:一个关于C++中输入操作符>>方面的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045607 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved