如果条目大于90,则打印输出字符串的布尔函数

时间:2011-12-15 18:06:14

标签: c++ arrays search boolean

我正在尝试编写一个程序,允许用户输入他们选择的数量。我希望数字按升序显示并显示平均值。我完成了这个部分,但是如果至少有一个高于90的数字,我还希望打印出一个字符串,如果没有高于90的数字,我还想打印另一个字符串。我认为我非常接近于使这个工作,但是每当我通过编译器运行它时,它说我必须使用的布尔函数不带1个参数。我真的不知道该怎么办。

#include <iostream> 
using namespace std; 
#include <iomanip>  
#include <cstdlib>

int compare(const void* pa, const void* pb) 
{ 
  const int& a = *static_cast<const int*>(pa); 
  const int& b = *static_cast<const int*>(pb); 
  if (a < b) return -1; // negative if a<b 
  if (a > b) return 1; // positive if a>b 
  return 0; // 0 for tie 
} // compare 

double getAverage(int* score, int n) 
{ 
  int sum = 0; 
  int i = 0; 
  for (i = 0; i < n; i++) 
    sum += score[i]; 
  double average = double(sum) / n; 
  return average; 
} // getAverage 
//Boolen Function to see if there are A grades present 
bool getAGrades(int* score, int n) 
{ 
    int i = 0;
    for (i = 0; i < n; i++){
        if (score[i] >= 90){
            return true;
            cout << "there is at least one A"<<endl;
         }else {
             return false;
             cout<<" No A Grades "<<endl;
         }
    }
}
int main() 
{  
    int size;
    cout << "How many scores? ";
    cin >> size;
    cin.ignore(1000, 10);
    int* score = new int[size];  

    int i; // loop counter 
    for (i = 0; i < size; i++) 
    { 
        cout<< "Enter a number: ";
        cin >> score[i]; 
        cin.ignore(1000, 10); 
    } // for 

    qsort(score, size, sizeof(int), compare); 
    for (int i = 0; i < size; i++) {
        cout << score[i] << ' ';
    }
    cout <<endl;
    cout << "Lowest score  = " << score[0] << endl;
    cout << "Highest score = " << score[size-1] << endl;
    cout << fixed << setprecision(1);
    cout << "Average = " << getAverage(score, size) << endl; 
    //this is where i want it to print if there are a grades or not
    getAGrades(score);

    return 0; 
} // main

3 个答案:

答案 0 :(得分:2)

首先,您的问题是:函数getAGrades需要int* scoreint n。从main返回之前,您要做的最后一件事是致电getAGrades(score);,但是您没有给它一个大小。您还必须传递大小:getAGrades(score, size)

第二:为什么你的比较函数需要void*?这没有任何理由是危险的。为什么不使用具有安全比较功能的类型安全std::sort

第三:getAGrades在每个cout之前返回,因此它永远不会显示任何内容。它应该cout然后返回 编辑:Keven还注意到getAGrades在找到不是A的成绩时返回。正如他解释的那样,这样的函数应该在找到A等级时返回,或者如果它已经检查所有等级没有找到任何等级。 for循环后,将"No A Grades"块移至

第四:你的cin.ignore没有做任何有用的事情,因为你只有格式化的输入。另外,使用'\n'代替10,否则会让人感到困惑,而且更便携。

第五:首选标准容器来分配自己的数组。因为您的代码泄漏了score数组。

答案 1 :(得分:1)

bool getAGrades(int* score, int n) 

getAGrades需要两个参数 - 得分和n。

getAGrades(score);

当你调用getAGrades时,你只传入一个参数。您还应传入n。

的参数
getAGrades(score, size);

你的getAGrades函数体也有一些错误。假设你传入了一个数组[1,100]。在for循环的第一次迭代中,它看到得分[0] == 1,因此它返回false。它永远不会得分[1]看到它高于90.因此,你应该延迟返回false,直到你遍历整个数组。

bool getAGrades(int* score, int n) 
{ 
    int i = 0;
    for (i = 0; i < n; i++){
        if (score[i] >= 90){
            return true;
            cout << "there is at least one A"<<endl;
        }   
    }
    return false;
    cout<<" No A Grades "<<endl;
}

还有一件事 - 你的cout语句在你返回一个值后发生,所以它们永远不会被执行。你应该把它们放在return语句之前。

bool getAGrades(int* score, int n) 
{ 
    int i = 0;
    for (i = 0; i < n; i++){
        if (score[i] >= 90){
            cout << "there is at least one A"<<endl;
            return true;
        }   
    }
    cout<<" No A Grades "<<endl;
    return false;
}

答案 2 :(得分:1)

使用std::sortstd::vector。 我知道这不是这个问题的答案。 但是当你想使用C ++时,你不应该尝试使用像qsort这样的C函数。 使用std::sort,您也可以对c数组进行排序。

qsort(score, size, sizeof(int), compare);变为std::sort(score, score+size);(或std::sort(score, score+size, compare);

C ++方式(使用std::vectorstd::sort,使用固定getAGrades函数):

 #include <iostream> 
 #include <iomanip>
 #include <vector>
 #include <algorithm>  

 using namespace std;

 double getAverage(const vector<int>& score) 
 { 
    int sum = 0;
    for(int i = 0; i < score.size(); ++i)
    {
        sum += score[i];
    }
    return sum / double(score.size()); 
 }


 bool getAGrades(const vector<int>& score) 
 { 
     for (int i = 0; i < score.size(); ++i)
     {
         if (score[i] >= 90)
         {
            cout << "there is at least one A"<<endl;
            return true;
         }
     }
     cout << "No A Grades"<<endl;
     return false;
 }

 int main() 
 {  
     int size;

     cout << "How many scores? ";
     cin >> size;
     cin.ignore(1000, 10);

     vector<int> score(size);

     for (int i = 0; i < size; i++) 
     { 
         cout<< "Enter a number: ";
         cin >> score[i]; 
         cin.ignore(1000, 10); 
     }

     sort(score.begin(), score.end());
     for (int i = 0; i < size; i++)
     {
         cout << score[i] << ' ';
     }
     cout <<endl;
     cout << "Lowest score  = " << score[0] << endl;
     cout << "Highest score = " << score[size-1] << endl;
     cout << fixed << setprecision(1);
     cout << "Average = " << getAverage(score) << endl; 

     getAGrades(score);

     return 0; 
 }