c++ cin返回值问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ cin返回值问题相关的知识,希望对你有一定的参考价值。
cin有返回值么?
为什么我写下面的代码
int i;
/int j;
j = cin >> i;
cout << j << endl;
编译错误 错误在 j = cin >> i;这一行
但是我写
int i;
while (cin >> i)
cout << i << endl;
就能编译通过呢?
cin >> i的返回值类型不是int,是istream类模版特化的一个类。运行这个程序你就可以看到返回值类型是什么了。
#include <iostream>#include <cstdlib>
#include <typeinfo>
using namespace std;
int main()
int i;
cout<<typeid(cin>>i).name()<<endl;
system("PAUSE");
return 0;
在VC++6.0中运行的结果是class std::basic_istream<char,struct std::char_traits<char> >
P.S.如果你不知道typeid是什么,简介一下。typeid获得运行时的类型,typeid(...).name()就是用字符串(char*型)来表示这个类型。
P.S.合理性:cin>>i返回值类型是istream的合理性在于,这样就可以这么写了:cin>>i>>j,因为cin>>i是一个istream,和cin类型是一样的,才可以继续">>j"。
参考技术A 这个问题涉及到"cin>>i"这个表达式返回值的问题。在编译时报错提示你‘=’操作符重载两端类型不匹配。
说明“cin>>i”这个表达式的返回值不是整形的,不能付给j这个变量。
j=cin>>i;这句改成
cin>>i;
j=i;就没问题 参考技术B int i;
int j;
j = (cin >> i);
cout << j << endl;
这样试试。 参考技术C 优先级问题 家个括号就好了
j=(cin>>i); 参考技术D 他是二元操作符
C++ 中cin 输入流的peek函数用法????
peek是c++io流里面的方法,c++
io流是其独有的,c里面并不能通用。
peek首先构造一个sentry对象
其次调用与流关联的streambuf对象的sgetc方法返回当前流指针位置处的字符,以int(ascii码)方式返回,sgetc只返回流中当前字符,并不移动流指针的位置。接着销毁sentry对象。
最后将istream的gcount方法的返回值设为0.(gcount将返回
该操作/方法从流中抽取的字符数,设为0,是要告诉流,该方法/操作并没有从流里面抽取任何字符) 参考技术A 根据
《C++
primer》中解析
cin.peek()
将下一字节作为int值返回但不移出它
我试了个例子
#include
using
namespace
std;
int
main(void)
char
ch,
temp;
while
(cin.get(ch))
temp
=
cin.peek();
cout.put(temp);
return
0;
假如输入abc
则输出bc
我想大概是:
先cin.get(ch)
把abc插入流中
当前流位置在a处
temp
=
cin.peek()
通过.peek()
把当前流的下一字符的副本
即为b返回给temp
所以输出b
然后通过循环
流位置在b处
再通过.peek()返回流的下一字符c给temp
所以输出c
呵呵
不知道对不对
以上是关于c++ cin返回值问题的主要内容,如果未能解决你的问题,请参考以下文章
cin>>的返回值与cin.fail()的返回值是完全同步的吗?