2 tianliangcsdn tianliangcsdn 于 2016.03.23 11:56 提问

c++为什么不能用while(cin>>(。。。)!=EOF)来实现一次运行多次数据的输入?
c++

c语言中用while(scanf(。。。)!=EOF)来实现一次运行的多次输入。 c++为什么不能用while(cin>>(。。。)!=EOF)来实现? 改怎么改? 如下程序为什么不行?

#include
using namespace std;
#define pi 3.1415926
const double PI=3.14;
int main()
{ system("color 4A");
double s1,s2,r;
while((cin>>r)!=EOF)
{

        s1=PI*r*r;
        s2=pi*r*r;
        cout<<"s1="<<s1<<endl;
        cout<<"s2="<<s2<<endl;

}

system("pause");

}

4个回答

cxsmarkchan
cxsmarkchan   2016.03.23 12:17

改成while(cin>>r)

qq_26714389
qq_26714389   2016.03.23 12:18

这样做的操作结果是比较 cin != EOF, 请问你知道这是什么意思吗? 若要改就把cin拿出来,cin>>i返回值类型是istream的目的是可以写成:cin>>i>>j,因为cin>>i是一个istream,和cin类型是一样的,才可以继续">>j"。

qq_26714389
qq_26714389 回复tianliangcsdn: 如果是检查数据流是否正确可以通过判断cin.fail()的结果, 如果有错则可以cin.clear(), cin.ignore(),但这里如果是连续输入而不考虑是否会给错误数据可以直接在函数体内cin,在下一次重复的cin覆盖原来的值
一年多之前 回复
qq_26714389
qq_26714389 回复tianliangcsdn: 意思是cin不能拿来与EOF比较,scanf的返回值表示读了多少,但cin没有这样的返回值.
一年多之前 回复
tianliangcsdn
tianliangcsdn 初学者 没听懂 您能说详细一点吗?
一年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2016.03.23 12:25

EOF是一个宏,值是-1,cin不是函数,没有返回值,也就没办法去比较了

huatian5
huatian5   2016.03.26 11:08

其实while(cin>>r)就ok啊,如果你还要判断r是否为0,就只需while(cin>>r,r),截止是ctrl+z

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!