![](/img/trans.png)
[英]Run-Time Check Failure #2 - Stack around the variable ''z" was corrupted
[英]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.