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覆盖原来的值
2 年多之前 回复
qq_26714389
qq_26714389 回复tianliangcsdn: 意思是cin不能拿来与EOF比较,scanf的返回值表示读了多少,但cin没有这样的返回值.
2 年多之前 回复
tianliangcsdn
tianliangcsdn 初学者 没听懂 您能说详细一点吗?
2 年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C/C++中,写在while循环体的cin.getline()语句执行一次问题
#include #include #include using namespace std; int main() {     int count;     cin>>count;     string s;     string temp;     cin.ignore();     for(int i=0;i     {         getline
std::cin 与 ctrl+z 配合使用时遇到的问题
《C++ Primer》第四版第一章1.4.4节,就早早的教了women
linux系统下怎么输入EOF退出输入循环while(getline(cin, temp)){.....}
linux系统下怎么输入EOF退出该循环while(getline(cin, temp)){.....}, while(cin >> temp){.....} Ctrl+D
C语言输入多组数据------“~”与 “EOF”的抉择
while(~scanf("%d",&A))通过这样这样也可以获取多组数据 scanf的返回的值 EOF定义 ACMer
关于windows下在while中先输入回车再输入ctrl+Z()才能表示EOF的解答
输入缓冲是行缓冲。当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,缓冲区中的可读的数据才会被检测。Ctrl+Z产生的不是一个普通的ASCII码值,也就是说它产生的不是一个字符,所以不会跟其它从键盘上输入的字符一样能够存放在输入缓冲区。如果输入缓冲区中有可读的数据则不会检测Ctrl+Z(因为有要读的数据,还不能认为到了流的末尾)。  从键盘上输入 abc
C语言再学习 -- 输入/输出
一、缓冲区 输入字符的立即回显是非缓冲或直接输入的一个实例,它表示你说键入的字符被手机并存储在一个呗成为缓冲区的李世存储区域中。按下回车可使你所键入的字符块对程序变成可用。 为什么需要缓冲区?首先,将若干个字符作为一个块传输比逐个发送这些字符耗费的时间少。其次,如果你输入有误,就可以使用你的键盘更正功能来修改错误。当最终按下回车键时,你就可以发送正确的输入。另一个方面,一些交互性的程序需要非缓
在while中使用cin>>a 为条件,注意事项
#include using namespace std; int main() { int currVal = 0 , val = 0; if(cin >> currVal) { int cnt=1;//统计次数 while(cin >> val) { if(currVal == val) { cnt++; } else{ cout <<
cin使用方法
    cin建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是为什么有时会出现输入语句失效的原因! cin的一些输入函数和操作符      1. cin该操
C/C++中cin.get()的用法与EOF的使用
1、EOF的含义 /* End of file character.    Some things throughout the library rely on this being -1.  */ #ifndef EOF # define EOF (-1) #endif EOF在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中
一个关于while(cin>>d)不得不注意的问题
今天写了一个程序,在指定数组中查找输入键值k所在位置: #include #include "Find.h" using namespace std; const int max_n=10000; int main() { int a[max_n]; int n=0; int d,k; cout<<"输入数组:"<<endl; while(cin>>d) { a[n++]=d;