谁能告诉我我的C ++代码有什么问题

时间:2013-12-30 19:51:19

标签: c++

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include <string>

using namespace std;

int array1 [70];
string array2 [1000];

void numgenerate (void)
{
    int marks,count; 

    for (count=0 ; count<71 ; count++)
    {
        marks = rand() % 101;
        array1 [count] = marks;

        if(marks>=82)
            array2 [count]="A+";
        else if(marks>=74 && marks<81)
            array2 [count]="A";
        else if(marks>=66 && marks<73)
            array2 [count]="B";
        else if(marks>55 && marks<65)
            array2 [count]="B-";
        else if(marks>=68 && marks<55)
            array2 [count]="C";
        else if(marks>=61 && marks<68)
            array2 [count]="C-";
        else if(marks>=54 && marks<61)
            array2 [count]="D";
        else 
            array2 [count]="F";

    }
}

void createfile (void)
{
    numgenerate();

    ofstream file( "G:\\student grade and number file.txt", ios::out );

    if(!file)
    {
        cerr << "File could not be opened" << endl;
        exit( 1 );
    }

    for (int count=0 ; count<=70 ; count++)
    {
        file<<setw(4)<<array1 [count]<<"      "<<array2 [count]<<endl;
    }
}

void main ()
{
    createfile();
    system ("pause");

    return ;
} 

我一直收到以下错误

Unhandled exception at 0x61ee797f (msvcp90d.dll) in NEW PROJECT.exe: 0xC0000005: Access violation writing location 0x0000004b.

任何人都可以告诉我为什么我会一直收到这个错误以及如果你能解决我的代码如何更正我会给你很大的帮助。

2 个答案:

答案 0 :(得分:6)

for循环的退出条件

for (count=0 ; count<71 ; count++)

应该是

for (count=0 ; count<70 ; count++)

这样,当count == 70时,不执行循环。如果使用count == 70执行循环,则超出数组的范围,其长度为70(元素从0到69)。

正如LumpN指出的那样,第二个循环也是错误的:

for (int count=0 ; count<=70 ; count++)

即使在这种情况下,你也试图写出数组边界,因为在count == 70

时也会执行循环

答案 1 :(得分:2)

第一个数组的有效indecies为0 - 69,因为该数组有70个元素。所以以下循环无效

for (count=0 ; count<71 ; count++)

for (int count=0 ; count<=70 ; count++)

必须

for ( int count = 0 ; count < 70 ; count++ )

同样最好定义相应的常量命名此幻数。例如

const int N = 70;

然后在循环中使用此常量

for ( int count = 0 ; count < N ; count++ )

函数main也应该有返回类型int

int main()

此外,我发现以下if-else语句的条件存在矛盾

    if(marks>=82)
        array2 [count]="A+";

    else if(marks>=74 && marks<81)
        array2 [count]="A";

    else if(marks>=66 && marks<73)
        array2 [count]="B";

    else if(marks>55 && marks<65)
        array2 [count]="B-";

    else if(marks>=68 && marks<55)
        array2 [count]="C";

    else if(marks>=61 && marks<68)
        array2 [count]="C-";

    else if(marks>=54 && marks<61)
        array2 [count]="D";

    else 
        array2 [count]="F";

比较例如标记B-和C.