好吧,所以,我一整天都在试图弄清楚如何为作业编写这段代码。我现在迷失了,我需要帮助。
我正在用 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;
}
除了实现中的各种机会区域之外,请注意,您有两个嵌套循环代码块“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
}
最后一点,在您学习时,我建议您在每一行代码中添加注释来描述它正在做什么,这样当您稍后查看它时,您可以验证代码是否确实按照您的意图进行操作,并且更容易理解同行们查一下就知道每一行的用意了。
希望有帮助。