大家帮忙看一下为什么用第一个while循环计数是12次,而用第二个while循环计数就是11次?两个循环的意思一样呀,难道EOF位置不同?不应该呀,都是一样的文

qq_35811698 2016-08-31 10:39:32
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
const int size = 50;
int main()
{
char filename[50];
cin.getline(filename, 50);
ifstream infile;
infile.open(filename);

if (!infile.is_open())
{
cout << "Could not open the file!\n";
cout << "Programe termanating!\n";
exit(EXIT_FAILURE); //你需要注意这里不能把这里忘掉。
} //前面这都是读取文件的准备工作,接下来才是正文。

double value;
double sum = 0.0; //这个最好是写0.0.如果写0的话即使你定义的是双精度,但是有时候算完就自动变成了整型。
int count = 0;

infile >> value;
while (infile.good()) //检查输入是好的并且没有到文件结束符
{
count++;
sum += value;
infile >> value;
}
/*while (infile >> value)
{
count++;
sum += value;
}*/
if (count == 0)
cout << "NO DATA PROCESSED.";
else
{
cout << "items read : " << count << endl;
cout << "sum = " << sum << endl;
cout << "average = " << sum / count << endl;
}

infile.close();
return 0;

}
...全文
242 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-31
  • 打赏
  • 举报
回复
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
while (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。
lm_whales 2016-08-31
  • 打赏
  • 举报
回复
循环外边意境读了一次了(没计数) 所以,成功读数11次 第一个循环,包含一次不成功的读,所以循环内部,共计读12次,计数12次.。。很诚实。。 第二个循环读不成功 ,就不进行循环了。最后这次读失败,没有计数,共计数11次,撒谎了,虽然是善意的 所以,本质上没有区别,都是读13次 除了第一次循环外部读以外, 第一个,每次读,不论成功与否,都计数,12次读 第二个,成功才计数,失败不计数,11次成功(一次失败)读 另外, 变量定义以后,是不会因为初始化而改变类型的。
double sum = 0.0;  //0.0是double 类型常量。
//double sum = 0; //二者区别不大。0是整型常量。
初始化成0,或者0.0 都没关系,因为 double 和int 类型兼容 不过,写成 0,有的编译器会警告,有的不会。
小灸舞 2016-08-31
  • 打赏
  • 举报
回复
我猜是因为你第二个循环没有把第一个while循环外的那句infile >> value;一起注释掉
paschen 版主 2016-08-31
  • 打赏
  • 举报
回复
这种问题楼主单步跟踪程序运行很容易找出原因
qq_35811698 2016-08-31
  • 打赏
  • 举报
回复
我给出了一个文本文件里面有12个数。它们的分部是这样的:18 19 18.5 13.5 14 16 19.5 20 18 12 18.5 17.5

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧