为什么这个循环会破坏阵列?

时间:2014-11-12 04:03:32

标签: c++

我在这里发帖是因为我需要你帮助解决这个问题。我一直试图通过自己修复它,但我没有运气。我真的不明白发生了什么。如果你查看我的代码,你会注意到我有以下循环:

 for (j = 0; j < total_scores; j++)
        {

        cout << "P is " << p << endl ;
        cout << "Enter score : ";
        cin >> scores[p];
        p++;

        }

好吧,如果我启用这段代码,存储名称的数组已损坏,我获得了一个奇怪的结果,位置0:4 @和一个错误“运行时检查失败#2 - 堆栈周围变量'得分'已损坏。“

我真的不明白为什么,或者如何解决这个问题。没有要求分数的循环,名称的循环保持不变。如果它们是两个独立的元素,我不明白这里发生了什么。

有什么想法吗?我非常感谢你的时间和关注。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    const int total_students=   2 ;
    const int scores_students = 1 ;
    const int total_scores = scores_students*total_students;

    string names[total_students];
    double scores[total_scores];
    double average[scores_students];
    double averages=0.0;



    int i;
    int j  =  0 ;
    int k;
    int l;
    int m;
    int p = 0 ;



    for (i = 0; i < total_students; i++)
    {
        cout << "I is " << i << endl;
        cout << "Enter name : "; 
        cin >> names[i];

        for (j = 0; j < total_scores; j++)
        {

        cout << "P is " << p << endl ;
        cout << "Enter score : ";
        cin >> scores[p];
        p++;

        }

    }


    for (m = 0 ; m < total_students ; m++)
    {

        cout << "\nName : " << names[m] << endl << endl ;
        //cout << "Average :  " << average[m] << endl;

    }

    system("pause");
    system("pause");
}

我需要的是要求姓名的程序,然后是基于“scores_students”的测试结果,然后是第二个名称和下一个分数。等等

我正在寻找的输入示例:

Name Score1
Peter 20
Mark  100

1 个答案:

答案 0 :(得分:4)

循环中有一个循环,因此p最终可以递增到4,因此当数组大小仅为2时,您尝试访问scores[4]

基于评论,看起来答案是&#34; j循环&#34;应为for (j = 0; j < scores_student; j++)而不是total_scores,这会导致上述溢出。

相关问题