jr9910 发表于 2010-9-2 22:35

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

初学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始终为真。请高手指点一下![em06]

cnfarer 发表于 2010-9-3 07:17

cin从缓冲区接受字符,如果接受不到,它会等待输入!

jr9910 发表于 2010-9-3 10:42

我大概懂你的意思,但是当输入为0时,while的结束条件就满足了,这条cin语句是否应该不再执行了呢?

makebest 发表于 2010-9-3 10:59

楼主犯了想当然的错误, cin >> x 的返回值是 istream , 不是 x 的值, 所以一直是 真.
楼主如果知道有这个用法, 大概就不会这么想了
cin >> x >> y >> z;

jr9910 发表于 2010-9-3 13:45

回复 4楼 makebest

看的程序还比较少,但用cout同时输出过多个值,所以cin >> x >> y >> z的这种用法也是可以理解的。

okboy 发表于 2010-9-4 16:24

cin >> x 的返回值是 istream ,不是X的值,循环当然不会结束

jr9910 发表于 2010-9-7 22:25

回复 6楼 okboy

现在把cin这块弄明白了:cin函数返回cin。如果cin位于测试条件当中,将被转化为bool类型。如果输入成功,则转化后的值为true,否则为false。因此上面程序如果使用cin直接作为控制条件,在输入数字的情况下,将永远为true。楼上说的很好,但再详细些就好了。

jr9910 发表于 2010-9-7 22:27

回复 4楼 makebest

这种使用方法我今天看到实际例子了

_ok123 发表于 2010-9-9 15:58

你还是没有搞清楚C++最基本的输入输出流。

staor 发表于 2010-9-12 15:42

回复 7楼 jr9910

只好在循环中加入if(x==0) break;了..

m21wo 发表于 2010-9-23 22:13

while((cin>>x)&&(x!=0))就可以了

bc3_ljx 发表于 2010-10-7 16:37

while(x)
{ cin>>x;
...

聆听 发表于 2010-10-21 21:06

死循环!

lucky563591 发表于 2010-11-2 07:52

连空间声明都写错地方了

lqsh 发表于 2011-8-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]

编程论坛