莫名其妙的问题

mcmay 2014-11-27 12:18:31
各位达人,下面这个简单程序是测试两个函数,一个函数直接从main中获取Sales结构体中sales数组的值,然后做一些规定的操作,如获取均值和极值,另一个是从使用者那里获取sales数组的值,然后做同样的操作,最后将两个结构体的各个信息打印出来。但是运行后,第二个数组的极值显示却有问题,最大值和最小值是一样的。

sales.h
//sales.h
#ifndef SALES_H_
#define SALES_H_

namespace SALES
{
const int QUARTERS = 4;
struct Sales
{
double sales[QUARTERS];
double average;
double max;
double min;
};
// copies the lesser of 4 or n items from the array ar
// to the sales member of s and computes and stores the
// average, maximum, and minmum values of the entered items;
// remaining elements of sales, if any, set to 0
void setSales(Sales & s, const double ar[], int n);
// gathers sales for 4 quarters integeractively, stores them
// in the sales member of s and computes and stores the
// average, maximum, and minmum values
void setSales(Sales & s);
// display all information in structure s
void showSales(const Sales & s);
}
#endif


sale.cpp
// sales.cpp
#include <iostream>
#include "sales.h"

void SALES::setSales(Sales & s, const double ar[], int n)
{
double sum = 0.;

s.sales[0] = ar[0];
s.max = s.sales[0];
s.min = s.sales[0];
sum += s.sales[0];

for(int i = 1; i < n; i++)
{
s.sales[i] = ar[i];
sum += s.sales[i];
if(s.max < s.sales[i])
s.max = s.sales[i];
else if(s.min > s.sales[i])
s.min = s.sales[i];
}
s.average = sum / n;
}

void SALES::setSales(Sales & s)
{
using std::cout;
using std::cin;
using std::endl;

for(int i = 0; i < SALES::QUARTERS; i++)
{
cout << "Enter number: ";
cin >> s.sales[i];
}
double sum = 0.;
s.max = s.sales[0];
s.min = s.sales[0];

sum += s.sales[0];

for(int i = 1; i < SALES::QUARTERS; i++)
{
sum += s.sales[i];
if(s.max < s.sales[i])
s.max = s.sales[i];
else if(s.min > s.sales[i]);
s.min = s.sales[i];
}
s.average = sum / SALES::QUARTERS;
}

void SALES::showSales(const Sales & s)
{
using std::cout;
using std::endl;

cout << "Sales:" << endl;
for(int i = 0; i < SALES::QUARTERS; i++)
cout << s.sales[i] << "\t";
cout << "Average: " << s.average << endl;
cout << "Max: " << s.max << endl; // 这里显示Max和Min是一样的
cout << "Min: " << s.min << endl;
}


main.cpp
// main.cpp
#include <iostream>
#include "sales.h"

int main()
{
SALES::Sales dat1, dat2;
double ar[4] = {3.2, 4.8, 5.2, 6.3};

SALES::setSales(dat1, ar, 4);
SALES::setSales(dat2);
std::cout << "Sales 1: " << std::endl;
showSales(dat1);
std::cout << "Sales 2: " << std::endl;
showSales(dat2);

return 0;
}
...全文
105 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2014-11-27
  • 打赏
  • 举报
回复
for(int i = 0; i < SALES::QUARTERS; i++) { cout << "Enter number: "; cin >> s.sales[i]; } 断点调试这操作之后sales的值

64,654

社区成员

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

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