0
for(i=0; i<NUM_STUDENTS; i++)
{

    if(studentGrades[i]>=GRADE_BOUNDS[0])
    {
        cout<<"Student "<<k<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[0]<<endl;
    }

    else if(studentGrades[i]<GRADE_BOUNDS[10])
    {
        cout<<"Student "<<k<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[11]<<endl;
    }

    for(j=0; j<GRADE_COUNT; j++)
    {
        if(studentGrades[i]<GRADE_BOUNDS[j]&&studentGrades[i]>=GRADE_BOUNDS[j+1])
        {
            cout<<"Student "<<k<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[j+1]<<endl;
            break;
        }
    }
    k++;
}

大家好,这是我在 stackoverflow 上的第一篇文章,我会尽量保持我的问题准确,我目前正在介绍编程,如果我的代码片段不是一流的,请原谅我仍在学习。我的任务是设计一个程序,该程序将接受 20 个学生等级 (0.0 - 100.0) 的用户输入。接受输入的 for 循环工作正常,我当前的问题是,当我输入一个小于 60 的值(在这种情况下被认为是 F)时,程序将输出“学生 k 得到 59,即 a(n ) F" 连续两次,但是当我输入任何大于 60 的值时,它都可以正常工作。为什么会这样?我将包括我在这个片段中使用的两个数组。最后的 k++ 只是一个累加器变量,用于计算学生数量。

我最初将所有三个 if 语句都放在嵌套的 for 循环中,但我的导师建议我将前两个移到外部循环,因为前两个 if 语句根本不使用变量“j”所以那里不需要将它们放在嵌套循环中。在我做出这个改变之前,它完美无缺。

**编辑忘记包含 GRADE_LETTERS 数组

const string GRADE_LETTERS[] = { "A", "A-", "B+",  "B", "B-", "C+", "C", "C-", "D+", "D", "D-", "F" };

const double GRADE_BOUNDS[] =  { 92.0, 90.0, 87.0, 82.0, 80.0, 77.0, 72.0, 70.0, 67.0, 62.0, 60.0, 0.0 };
const int GRADE_COUNT = sizeof( GRADE_BOUNDS ) / sizeof( GRADE_BOUNDS[0] );
4

2 回答 2

0

你有两个地方可以打印一些东西:

    if(studentGrades[i]>=GRADE_BOUNDS[0]) // > 92.0
    else if(studentGrades[i]<GRADE_BOUNDS[10]) // < 60.0

    if(studentGrades[i]<GRADE_BOUNDS[j]&&studentGrades[i]>=GRADE_BOUNDS[j+1])

GRADE_BOUNDS[0]是 92.0,如果输入的值高于 92,则不会触发第二个条件。但是最后一个输入GRADE_BOUNDS是 0,因此输入 0 到 60 之间的值会触发顶部条件 ( else if(studentGrades[i] < 60)) 和底部条件 ( if(studentGrades[i]< 60 &&studentGrades[i]>= 0))。

希望有帮助!

于 2013-10-24T19:33:06.640 回答
0

如果您的成绩是,一旦您在前 2 个 if 语句中找到下一个学生,您就忘了继续到下一个学生:

if(studentGrades[i]>=GRADE_BOUNDS[0])
{
    cout<<"Student "<<i<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[0]<<endl;
    continue;
 }        
 else if(studentGrades[i]<GRADE_BOUNDS[10])
 {
    cout<<"Student "<<i<<" got "<<studentGrades[i]<<" which is a(n) "<<GRADE_LETTERS[11]<<endl;
    continue;
 }

另一个问题是访问j+1将导致缓冲区溢出(另一个分段错误)

于 2013-10-24T19:33:55.513 回答