1000,1001,1089~1096

本来以为开始两个很简单,看着也很简单,但是WA了3次,还有Presentation Error,后来发现题目小要求没看到,还有没有注意格式!任重道远!!!

 

while(cin>>n){
cout<<n*(n+1)/2<<endl;
}

----------------------------更新于2015.12.21-------------------------------------------------------------------------------------

转义字符


---------------------------------关于while(cin>>n)的一些疑问:-------------------------------------------------------------------------------------------------------------------------------

首先,cin是个对象,没有所谓返回
>>输入操作符返回流对象的引用,cin >> x 返回istream& ,cout << x返回ostream&
if可直接判断流,如if (cin)
while间接判断,如while (cin >> x)
若流被标记错误(读取失败)就返回false.
ctrl+z,F6可跳出循环,这代表eof(文件结束符)

--------------摘自http://www.cnblogs.com/alex-tech/archive/2012/03/27/2420197.html----作者:Wang Hui--------------------------------

首先cin是一个对象,不会"返回"值,>>和<<才是方法,具有返回值。>>和<<操作符的运算顺序是由左向右边,所以下面的两种语句描述其实是一致的:

cin>>a>>b>>c;
(((cin>>a)>>b)>>c);

操作cin>>a的意义: 调用istream 的operator>>方法读取数据并存入变量a中。那么>>或者<<的返回值是什么呢?这里说的返回值并不是指读入变量中的值,而是返回赋给左值的数据,在这里, >>返回的是cin,追踪源码可以发现这一点:

istream& operator>> (istream& is, char& ch );
istream& operator>> (istream& is, signed char& ch );
istream& operator>> (istream& is, unsigned char& ch );
istream& operator>> (istream& is, char* str );
istream& operator>> (istream& is, signed char* str );
istream& operator>> (istream& is, unsigned char* str )

cin可以被如下使用:

if(cin){}
if(cin>>a>>b){}
while(cin>>a){}

上面说到了>>的返回值是cin,所里上面的真值判定等同于:

if(cin){}
if(cin){}
while(cin){}

如果cin的状态ok则为真,如果cin遇到eof或者发生错误则返回false, 为什么可以使用cin作为真值判定条件?

首先看cin是如何定义的:

extern istream cin;
这样的一个值怎么可以作为if的真值判定条件呢?这是因为在if(cin)或者while(cin)的时候,其实是调用了一个istream的方法,写一行简单的代码反汇编看一下:
int main() { 
    if(cin){} 
    return 0; 
}

对应的汇编代码如下:

未命名
其实所有派生自ios的类都可以被强制转换为一个指针,如果设置了错误标志位则指针为null,否则非null,测试如下代码:
#include <iostream>
#include <fstream>
using namespace std;
 
int main () {
  ifstream is;
  is.open ("test.txt");
  if ( (void*)is == 0)// Equal to if(is)
    cerr << "Error opening 'test.txt'\n";
  return 0;
}

------------------------------------摘自http://www.cnblogs.com/alex-tech/archive/2012/03/27/2420197.html-----------------------------

---------------------摘自http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html>-------作者:ifaithu-----------------------------------------------------------------

输入原理:

程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入

输入结束条件 :遇到Enter、Space、Tab键。


读取字符的情况:

输入结束条件:Enter键

对结束符处理:不丢弃缓冲区中的Enter

--------------------摘自http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html>------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值