게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C++ 왜 디버깅은 문제없는데, 실행도중에 오류가 날까요??
게시물ID : computer_111154짧은주소 복사하기
작성자 : 아버지레드불
추천 : 0
조회수 : 425회
댓글수 : 2개
등록시간 : 2013/09/08 20:03:25
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#define MAXM 10
#define MAXL 20
using namespace std;

class Attend{
public:
    Attend(){};
    void InputFile();                                    //외부에서 파일을 입력 받아온다.
    void StudentCount(int StuNumber,int Month, int LectureNumber);        //받을 학생들을 저장한다.
    void Count();
    void Compair();
private:
    int ***Stu;
    int OutNumber[MAXM][MAXL];
    int InStudent;
    int OutTemp;
    int i;
    int j;
    int k;
};

void Attend::InputFile(){
    ifstream file1;
    ofstream file2;

    int         SN = 0;
    int          M = 0;
    int         LN = 0;
    InStudent   = 0;
    
    string strTemp;        //학생 수(파일로 받을시는 string으로 받았기 때문에, int형식으로 바꿀예정)
    string str1;        //학번
    string str2;        //달
    string str3;        //강의번호
    
    file1.open("1.inp");
    file2.open("output.out");
    file1>>strTemp;

    InStudent = stoi(strTemp);        //int 형으로 변경


    Stu = new int**[MAXM];
        
    for(i=0;i<MAXM;i++){
        Stu[i] = new int*[MAXL];
        
        for(j=0;j<MAXL;j++){
            Stu[i][j] = new int[InStudent];        //동적할당
        }
    }
    
    for(i=0;i<MAXM;i++){
        for(j=0;j<MAXL;j++){
            for(k=0;k<InStudent;k++){
                Stu[i][j][k] = 0;                    //초기화
            }
        }
    }

    for(i=0;i!=InStudent;i++){
        file1>>str1>>str2>>str3;        //입력 받은 파일에서 자료값드을 받는다.
        SN = stoi(str1);            //int형으로 변경
        M = stoi(str2);                //int형으로 변경
        LN = stoi(str3);            //int형으로 변경
        StudentCount(SN,M,LN);        //받은 학생의 명단으로 부터 학생 수를 달, 수업 등으로 카운트한다.
    }
    Count();
    Compair();

    for(i=0;i<MAXM;i++){                        //가장 많이 결석한 달, 강의번호, 수를 출력해서 파일로 내보낸다.
        for(j=0;j<MAXL;j++){
            if(OutNumber[i][j] == OutTemp){
                file2<<i<<" "<<j<<" "<<OutTemp<<endl;
            }
        }
    }

void Attend::StudentCount(int StuNumber,int Month, int LectureNumber){

    int temp;

    for(i=0;i<InStudent;i++){                        //결석한 달, 강의번호에 학생번호를 입력하고, 같은 번호가 있을경우 삭제한다.
        if(Stu[Month][LectureNumber][i] == StuNumber){        //!!!!!!!!! 여기서 오류 발생!!!!!!!!!!!!!
            Stu[Month][LectureNumber][i] = 0;
            break;
        }
        else{
            if(Stu[Month][LectureNumber][i] == 0){
                Stu[Month][LectureNumber][i] = StuNumber;
                break;
            }
        }
    }

    for(i=0;i<MAXM;i++){                            //학생번호순으로 순차적으로 배열
        for(j=0;j<MAXL;j++){
            for(k=0;k<InStudent;k++){
                temp = Stu[i][j][k];
                Stu[i][j][k] = Stu[i][j][k+1];
                Stu[i][j][k+1] = temp;
            }
        }
    }
}

void Attend::Count(){
    for(i=0;i<MAXM;i++){
        for(j=0;j<MAXL;j++){
            OutNumber[i][j] = 0;
        }
    }

    for(i=0;i<MAXM;i++){                    //결석한 학생의 수를 카운트한다.
        for(j=0;j<MAXL;j++){
            for(k=0;k<InStudent;k++){
                if(Stu[i][j][k] != 0){
                    ++OutNumber[i][j];
                }
            }
        }
    }
}

void Attend::Compair(){
    OutTemp = 0;
    
    for(i=0;i<MAXM;i++){                            //카운트한 숫자 중에 가장 큰 수를 찾는다.
        for(j=0;j<MAXL;j++){
                if(OutNumber[i][j] != 0){
                    if(OutTemp = 0 || OutTemp < OutNumber[i][j]){
                        OutTemp = OutNumber[i][j];
                    }
                    else if(OutTemp <= OutNumber[i][j]){
                        continue;
                    }
                }
        }
    }
}

void main(){

    Attend Student;
    
    Student.InputFile();
    system("pause");
}

아참고로 dele...는 필터링 포함이라 되있어서 지웠습니다..
실제 코딩에서 되잇구요...
왜 위의 저 부분에서 오류가 날까요?
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호