鱼C论坛

 找回密码
 立即注册
查看: 3056|回复: 6

C++第二讲的习题c++解决方案中有几点迷惑。。大家能帮我解答下吗?

[复制链接]
发表于 2012-5-12 10:53:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是:输入任意整数和空格,求整数之和。
小甲鱼老师给出的程序是:
#include<iostream>
using namespace std;
int main()
{
    int i,sum = 0;
    cout<<"请输出一组数和任意空格:"<<endl;
    while (cin >> i)
   {
           sum += i;                           //疑惑在这里

           while (cin.peek ( ) == ' ')      //和这里
          {
                   cin.get( );
           }

           if (cin.peek()=='\n')
                break;
    }

     cout << sum << endl;
     return 0;
}

问题1:while(cin>>i)     
               sum+=i;
          【i定义为整数,这句即:当输入的i为整数时,sum+=1.  那么输入流中的空格是当做Ascll进入循环吗?如果是,那么下一句中的sum += 1,不是就会加上空格的ascll码了吗?如果不是,那字符空格都进入不 了循环,为什么还要写下面的 while(cin.peek( ) == ' ')    cin.get( ) ; ?】

问题2:
          由于上面疑惑,我想知道 while(cin.peek( ) == ' ')    cin.get( ) ; 中执行的是什么,就把cin.get( )改为 cout<<'#';   没想到执行的时候,不断的输入#  成为了死循环,这是怎么回事?

大虾们能帮我解答下吗?我是新手,问题也许很白痴,勿喷哦~
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-12 15:56:58 | 显示全部楼层
输入的字符实现存储在输入缓冲区里,一般的cin操作导致缓冲区里的字符被提取,如cin>>i.但cin.peek( )只是返回缓冲区里的下一个字符,并不提取它。cin.get( ) ;意思就是提取并返回缓冲区里的下一个字符。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-5-13 11:24:24 | 显示全部楼层
我觉得可以直接写成
while (cin >> i)
   {
           sum += i;                           
           if (cin.peek()=='\n')
                break;
   }

     cout << sum << endl;
     return 0;
}
我试过了是可以的。
那我省略了的一小段,它的作用是什么啊?

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-13 19:24:21 | 显示全部楼层
作用是将缓冲区里的空格读出来
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-5-14 13:38:15 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-5-15 10:15:50 | 显示全部楼层
本帖最后由 龙武 于 2012-5-15 10:18 编辑

必须要的因为cin和cout他们遇到空字符就会停止输入和输出,而cin.get() 只会遇到\n也就是换行回车就停止了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-5-16 16:48:29 | 显示全部楼层
龙武 发表于 2012-5-15 10:15
必须要的因为cin和cout他们遇到空字符就会停止输入和输出,而cin.get() 只会遇到\n也就是换行回车就停止了

谢谢你~还有一点, 要是我输入  _3_4_5(其中 _ 是空格,那么3前面的 _ 会进入while循环吗?)  
要是不会的话,是cin把它忽略了?
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-13 06:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表