注册 登录
编程论坛 C++ Builder

关于使用cin输入作为while循环控制条件的问题

jr9910 发布于 2010-09-02 22:35, 3876 次点击
初学C++,遇到个简单问题想请教,题目很简单,输入数据,每次输入后显示当前所有输入的和,直到输入0程序结束。
我的实现(使用VS2008编译)如下:
// 每次输入数字以后报告到目前为止输入所有数字的和,输入0程序终止
#include <iostream>

int main()
{
    using namespace std;

    double x;
    double sum = 0;

    while (cin >> x) 这样使用不行,不知道为什么cin >> x始终为真
    {
        sum = sum + x;
        cout << "Now, sum = " << sum << endl;
    }

    cout << "Input 0, Warnnig.......\nTerminated!";
    cin.get();
    cin.get();
    return 0;
}
我的意图是使用cin>>x作为循环控制条件,当输入为0时,while条件为false,程序退出。但是实际执行起来发现cin>>x始终为真。请高手指点一下!
14 回复
#2
cnfarer2010-09-03 07:17
cin从缓冲区接受字符,如果接受不到,它会等待输入!
#3
jr99102010-09-03 10:42
我大概懂你的意思,但是当输入为0时,while的结束条件就满足了,这条cin语句是否应该不再执行了呢?
#4
makebest2010-09-03 10:59
楼主犯了想当然的错误, cin >> x 的返回值是 istream , 不是 x 的值, 所以一直是 真.
楼主如果知道有这个用法, 大概就不会这么想了
cin >> x >> y >> z;
#5
jr99102010-09-03 13:45
回复 4楼 makebest
看的程序还比较少,但用cout同时输出过多个值,所以cin >> x >> y >> z的这种用法也是可以理解的。
#6
okboy2010-09-04 16:24
cin >> x 的返回值是 istream ,不是X的值,循环当然不会结束
#7
jr99102010-09-07 22:25
回复 6楼 okboy
现在把cin这块弄明白了:cin函数返回cin。如果cin位于测试条件当中,将被转化为bool类型。如果输入成功,则转化后的值为true,否则为false。因此上面程序如果使用cin直接作为控制条件,在输入数字的情况下,将永远为true。楼上说的很好,但再详细些就好了。
#8
jr99102010-09-07 22:27
回复 4楼 makebest
这种使用方法我今天看到实际例子了
#9
_ok1232010-09-09 15:58
你还是没有搞清楚C++最基本的输入输出流。
#10
staor2010-09-12 15:42
回复 7楼 jr9910
只好在循环中加入if(x==0) break;了..
#11
m21wo2010-09-23 22:13
while((cin>>x)&&(x!=0))就可以了
#12
bc3_ljx2010-10-07 16:37
while(x)
{ cin>>x;
...
#13
聆听2010-10-21 21:06
死循环!
#14
lucky5635912010-11-02 07:52
连空间声明都写错地方了
#15
lqsh2011-08-30 08:56
#include <iostream>
using namespace std;
 
int main()
 {
   
    double x;
     double sum = 0;
 
    while (cin>>x,x) //添加逗号运算符。因为cin返回值始终为1,直到遇见文件结束符ctrl+z
{
         sum = sum + x;
         cout << "Now, sum = " << sum << endl;
     }
 
    cout << "Input 0, Warnnig.......\nTerminated!";
     cin.get();
     cin.get();
     return 0;
 }
 
1