簡體   English   中英

運行時檢查失敗#2-變量'projectAverage'周圍的堆棧已損壞

[英]Run-Time Check Failure #2 - Stack around the variable 'projectAverage' was corrupted

#include <iostream>
#include <iomanip>
using namespace std;

int main(){
    double hw = 0, hwTotal = 0, hwAverage[3], id[3], project = 0, projTotal = 0, projectAverage[3], hwProj, finalExam[3], total[3];
    int i = 0, j = 0, k = 0;

    for (j = 0; j < 3; j++){
        cout << "Input student ID: ";
        cin >> id[i];
        for (i = 0; i < 4; i++){
            cout << "Input homework assignment grade: ";
            cin >> hw;

            hwTotal = hwTotal + hw;
        }

        hwAverage[j] = hwTotal / 4;

        for (i = 0; i < 2; i++){
            cout << "Input project grade: ";
            cin >> project;

            projTotal = projTotal + project;
        }

        projectAverage[j] = projTotal / 2;

        hwProj = (hwAverage[j] + projectAverage[j]) / 2;

        cout << "Input final exam grade: ";
        cin >> finalExam[j];

        total[j] = (finalExam[j] + hwProj) / 2;
    }

    cout << endl;

    for (k = 0; k < 3; k++){
        cout << "Student ID: " << id[k] << endl;
        cout << "Homework Average: " << hwAverage[k] << endl;
        cout << "Project Average: " << projectAverage[k] << endl;
        cout << "Final exam grade: " << finalExam[k] << endl;
        cout << "Final average: " << total[k] << endl;

        cout << endl;
    }

    return 0;
}

由於某種原因,當我運行此代碼時,我的輸出如下所示:

  • 輸入的學生ID:123
  • 輸入的作業分配等級:100
  • 輸入的作業分配等級:100
  • 輸入的作業分配等級:100
  • 輸入的作業分配等級:100
  • 投入項目等級:100
  • 投入項目等級:100
  • 輸入期末考試成績:100
  • 輸入的學生ID:12
  • 輸入的作業分配等級:40
  • 輸入的作業分配等級:40
  • 輸入的作業分配等級:40
  • 輸入的作業分配等級:40
  • 投入項目等級:40
  • 投入項目等級:40
  • 輸入期末考試成績:40
  • 輸入的學生ID:1
  • 輸入作業分配等級:20
  • 輸入作業分配等級:20
  • 輸入作業分配等級:20
  • 輸入作業分配等級:20
  • 投入項目等級:20
  • 投入項目等級:20
  • 輸入期末考試成績:20

  • 學生證:123

  • 平均家庭作業:100
  • 平均項目:100
  • 期末考試成績:100
  • 最終平均值:100

  • 學生編號:-9.25596e + 061

  • 平均家庭作業:140
  • 平均項目:140
  • 期末考試成績:40
  • 最終平均分:90

  • 學生證:1

  • 平均家庭作業:160
  • 平均項目:160
  • 期末考試成績:20
  • 最終平均分:90

  • 按任意鍵繼續 。

而且我得到一個堆棧溢出錯誤。 我剛接觸C ++,我正在編寫一個程序,要求用戶提供10個作業分配等級,2個項目等級以及10個學生的期末考試成績(程序中的數字較低,因此我可以進行測試更容易)。 我要分別對作業成績和項目成績進行平均,然后對這些平均值進行平均,然后將其與期末考試成績進行平均,得出一個總平均數(對不起,所有平均數),但是它似乎沒有用,並且我不知道為什么。 就像我說的那樣,我對於C ++還是相當陌生的,甚至對數組來說還是比較新的,所以您認為你們中的任何人都可以給我一些有關我出錯的地方的見解嗎? 非常感謝!

像hwAverage這樣的數組有10個元素(從[0]到[9]),但是您引用的是元素[10]。

定義更多元素或使用不同的索引。

對於其中包含10元素的數組,將10用作數組索引是錯誤的。 這會導致不確定的行為。

另外,使用相同的for循環變量聽起來並不正確。 您可以將i用於外部for循環,將j用於內部for循環。 從現在的代碼來看,您的外部for循環將永遠不會終止,因為i的值會在內部循環中重置。

采用

int i;
int j;   // New variable.

for (i = 0; i < 3; i++){
    cout << "Input student ID: ";
    cin >> id[i];
    for (j = 0; j < 4; j++){  // Use j here
        cout << "Input homework assignment grade: ";
        cin >> hw;

        hwTotal = hwTotal + hw;
    }

    hwAverage[i] = hwTotal / 10;

    for (j = 0; j < 2; j++){   // Use j here
        cout << "Input project grade: ";
        cin >> project;

        projTotal = projTotal + project;
    }

    projectAverage[10] = projTotal / 2;  // Fix the index.
                                         // I can't tell what's the right
                                         // index but it has to be  0 - 9.

    projectAverage[i] = projTotal / 2;   // Perhaps???

    hwProj = (hwAverage[10] + projectAverage[10]) / 2; // Fix index here too.
    hwProj = (hwAverage[i] + projectAverage[i]) / 2;   // Perehaps???

    cout << "Input final exam grade: ";
    cin >> finalExam[10];   // Fix index here too.
    cin >> finalExam[i];    // Perhaps???

    total[10] = (finalExam[10] + hwProj) / 2; // Fix index here too.
    total[i] = (finalExam[i] + hwProj) / 2;   // Perhaps???
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM