【问题标题】:Boolean function to print out string if there are entries higher than 90 [closed]如果条目高于 90,则布尔函数打印出字符串 [关闭]
【发布时间】:2012-01-21 09:58:03
【问题描述】:

我正在尝试编写一个程序,允许用户输入他们选择的数量。我希望以升序显示数字并显示平均值。我完成了这部分,但如果至少有一个数字高于 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

【问题讨论】:

  • 应该是C++?使用std::sortstd::vector..
  • 能否请您复制逐字编译器错误消息?

标签: c++ arrays search boolean


【解决方案1】:

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

第二:为什么你的比较函数取void*?那是无缘无故的危险。为什么不使用具有安全比较功能的类型安全 std::sort

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

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

第五:更喜欢标准容器而不是分配你自己的数组。因为您的代码泄漏了score 数组。

【讨论】:

  • so 'getAGrades(score, size);'
【解决方案2】:
bool getAGrades(int* score, int n) 

getAGrades 需要两个参数 - score 和 n。

getAGrades(score);

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

getAGrades(score, size);

您的 getAGrades 函数体也有一些错误。假设您传入了一个数组 [1,100]。在 for 循环的第一次迭代中,它看到 score[0] == 1,因此它返回 false。它永远不会得到 score[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;
}

【讨论】:

    【解决方案3】:

    使用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; 
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多