(C++)如何将分数输入到函数内的数组中,使用 -1 中断其输入循环,并使用数组查找分数=100?

问题描述 投票:0回答:1

好吧,所以,我一整天都在试图弄清楚如何为作业编写这段代码。我现在迷失了,我需要帮助。

我正在用 DevC++ 编写一个程序,它使用两个函数

getScores
countPerfect
,允许用户将最多 10 个分数输入到数组中。它还为用户提供了通过输入 -1(在
getScores
函数中)提前结束输入的选项。当我运行该程序并尝试使用 -1 结束它时,它不起作用。它接受 -1 作为输入并继续循环。

不仅如此,我很确定我也错误地执行了

countPerfect
功能。如果我成功退出循环,尽管是错误的(使用我尝试过的
getScores
迭代之一),它会说“您输入的
-1
分数包括
0
完美分数”,无论我的其他分数如何进入数组。

怎样才能让这个程序正常运行?

我已经尝试了几乎所有我能想到的方法来结束循环,但无济于事。我的大脑很累,这是我在从头开始之前尝试让这个程序运行的最后努力。我是 C++ 新手,所以如果其中大部分内容是错误的/风格不好,我很抱歉。非常欢迎建设性的批评!

// Function prototypes
int getScores(int[]);
int countPerfect(int[],int);

int main()
{
    const int size = 10;
    int array[size];
    int numScores;
        
// Explain program to user
    cout << "This program will allow you to enter up to 10 scores. " << endl
    << "Then, it will report how many perfect scores were entered." << endl;
    
// Call a function to input the scores into array
    numScores = getScores(array);
    
// Report results
    cout << "The " << numScores << " scores you entered include "
    << countPerfect(array, numScores) << " perfect scores.\n";
    
    return 0;
}

// Functions
// getScores will retrieve up to 10 scores from user

int getScores(int array[])
{   
    int index = 0;
    while(array[index] != -1)
    {
        for(int index = 0; index < 10; index++)
        {
            cout << "Enter a score from 0-100 (-1 to quit): ";
            cin >> array[index];
        }
    }

            
}

// countPerfect accepts array, then counts and returns the number of perfect scores
// (equal to 100)
int countPerfect(int array[], int numScores)
{
    int perfect = 0;
    for(int index = 0; index < numScores; index++)
    {
        if(index==100)
            perfect++;
        perfect = array[index];
    }
    return perfect;
}
c++ arrays function nested-loops dev-c++
1个回答
0
投票

除了实现中的各种机会区域之外,请注意,您有两个嵌套循环代码块“while -> for”,因此当索引在“for”外观中递增时,当您在“while”循环中检查它时,它会指向“下一个”数组项,而不是刚刚通过“cin”插入的数组项,因此它永远不会捕获早期输入终止,因为:

1.- for 循环将从 0 一直执行到数组大小 10,然后再返回到 while 循环 2.- 索引变量将始终为数组的大小。

这是您想要实现的目标的更接近的版本:

// Functions
// getScores will retrieve up to 10 scores from user

const int size = 10;

int getScores(int array[])
{   
    int index = 0; //set index to first array element
    do
    {
        cout << "Enter a score from 0-100 (-1 to quit): ";
        cin >> array[index];
        index ++;
        
    }while(array[index - 1] != -1 && index < size ) //compare the value of last input (thus the -1) while the index is lower than the size of the array (thus the && condition)
}

对于 getScores 函数,假设“数组”包含分数,“numScores”是数组中有效分数的数量:


// countPerfect accepts array, then counts and returns the number of perfect scores
// (equal to 100)
int countPerfect(int array[], int numScores)
{
    int perfect = 0; //set the number of perfect scores found to 0
    for(int index = 0; index < numScores; index++) //for each valid score in the array
    {
        if(array[index] == 100) //if the score is 100
            perfect++; //increment the number of perfect scores found
    }
    return perfect; //return the number of perfec scores found
}

最后一点,在您学习时,我建议您在每一行代码中添加注释来描述它正在做什么,这样当您稍后查看它时,您可以验证代码是否确实按照您的意图进行操作,并且更容易理解同行们查一下就知道每一行的用意了。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.