似乎我总是来这里问愚蠢的问题,但在这里。截至目前,我正处于我的第一个compsci课程中,我们正在学习c ++。我以前对c有一个非常基本的介绍,所以我以为我已经超越了我目前的任务。现在我只是为了表演这样做,我觉得如果我没有练习我以前的概念,他们最终会褪色。无论如何,关于问题!我应该编写一些代码,允许用户输入他们的首字母和一系列考试。现在这应该完成三件事:平均考试,打印输入的考试,并打印出他们的首字母。嗯,什么是简单的任务,真的变成了一个巨大的混乱。
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
string uInitials;
float avgExam = 0, tExam = 0;
int aExams[10] = {'0'};
int i, nExam = 0, cExam;
cout << "Enter your three initials!";
cin >> uInitials;
do
{
cout << "Enter your exam(s) to be averaged. Enter 0 when complete!\n";
cin >> cExam;
aExams[nExam] = cExam; //I used this before nExam was incremented, in order to get nExam while it was '0' That way the first exam score would be properly saved in the first space
nExam++;
tExam += cExam; //This is just to add all the exams up to later calculate the average
}
while(cExam != 0);
avgExam = tExam/(nExam - 1); //subtracted '1' from nExams to remove the sentinel value from calculations.
cout << "The average for initials: " << uInitials << " is: " << avgExam << endl;
cout << "This average was obtained using the following scores that were entered: \n";
for(i = 0; i < (nExam+1); i++)
{
cout << aExams[i] << endl; //Used a for loop to prevent redundancy
}
return 0;
}
以前是我的代码,问题是当我打印输入的考试列表时,我会在输出错误的地方添加两个&#39; 0。另外我觉得我做了整个do {} while()循环一个巨大的笨重的混乱,所以我也想改进它。如果有人能帮助这个可怜的,无知的,初学者,我会非常感激。谢谢你的时间!
答案 0 :(得分:1)
在代码末尾打印出两个0的问题是你编写for循环的结果。
而不是:
for(i = 0; i < (nExam+1); i++)
{
cout << aExams[i] << endl; //Used a for loop to prevent redundancy
}
使用:
for (i = 1; i < (nExam); i++)
{
cout << aExams[i - 1] << endl; //Used a for loop to prevent redundancy
}
答案 1 :(得分:1)
我可以给出一些建议,例如在第5行,没有必要 将0放在&#39;之间&#39;甚至不需要使用assign =运算符。 您可以像这样初始化数组: int aExams [10] {0}; 这会将所有元素初始化为0,但不能用于其他值。 例如,如果你写的话,你不会拥有值为1的所有元素 int aExams [10] {1}; 如果你初始化数组中所有元素的意图是0以外的值,你可以使用fill_n();功能
fill_n(aExams,10,1); 第一个参数是数组的名称,第二个参数是您希望使用第三个参数初始化的元素,第三个参数是您希望所有元素都具有的值。
不要像第6行那样使用cExam和i变量保留未初始化的变量。像cExam = 0一样初始化它; (copy-assign initialization)或cExam(0); (直接初始化)。后者调用int内置类型的构造函数。
我在你的do-while循环中看到的一个负面因素是你没有确保用户将在10次考试中输入,如果用户试图在一个只能容纳10次的数组中输入15个考试,就会发生不好的事情。
只需将while更改为更像这样的内容: while(cExam!= 0&amp;&amp;(nExam&lt; 10));
您还可以在循环外写入do-while循环的前两行。 只需要告诉用户停止循环他/她需要输入0只需要一次。在每次迭代时都没有必要告诉他们这一点,如果你将这两行排除在外,你将获得良好的性能优势。循环。
看看我如何编写代码并询问您是否有任何问题。