2011-10-09 90 views
-1

我得到一個分段故障在控制檯中運行 我使用的代碼塊在Ubuntu(Linux)的程序時C++級計算器控制檯錯誤

它與0錯誤和0警告

在引擎收錄

代碼編譯http://pastebin.com/wgSHPQjc

這裏是代碼

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

class Year 
{ 
    public: 

Year(string sone, string stwo, string sthree, string sfour, string sfive, string ssix, string sseven, string seight) // constructor 
{ 
     subjectName[0] = sone; 
     subjectName[1] = stwo; 
     subjectName[2] = sthree; 
     subjectName[3] = sfour; 
     subjectName[4] = sfive; 
     subjectName[5] = ssix; 
     subjectName[6] = sseven; 
     subjectName[7] = seight; 

     sum = 0; 
     percentage = 0; 
} 
void nameOfSem(string semName) // semster name 
{ 
    name = semName; 
    cout << "Enter your " << name << " marks"<< endl; 
} 
//no of subjects in semster and store marks in an array 
void readMarks(int noOfSubjects) 
{ 
    subjects = noOfSubjects; 
    for(int i=0; i<subjects; i++) 
    { 
     cout << subjectName[i]; // print out subject name stored in the array 
     cin >> yearName[i]; // input from keyboard of marks 
     // while loop so that user enters marks from 0 to 100 
     while (yearName[i]<0 || yearName[i] > 100) 
     { 
      cout << "incorrect input please enter again: "; 
      cin >> yearName[i]; 
     } 
    } 
} 

// function for calculating avarage 
void avarage() 
{ 
    for(int j=0; j<subjects; j++) // addtion of marks (addtion of array) 
    { 
     sum += yearName[j]; 
    } 
    cout << "the total is : " << sum << endl; 
    percentage = float(sum)/float(subjects); 
    cout << "The percentage is : " << percentage << endl; 
} 

      int sum; // for storing sum of marks 

      string name; // for storing name of the semister 
      int subjects; // for storing number of subjects in semister 
      float percentage; // calculating percentage in the sem 
      int yearName[]; // array for string marks 
      string subjectName[]; // array for storin g subject names 

}; 


// main function 
int main() 
{ 
    cout << "Welcome to xxx uni " << endl; 

    // constructor for storing subjects name in the array 
    Year first("Appiled Physics ", "Electronic Devices circuits ", "Basic electrical Engineering ", "C & Data Structures", "English ", "Mathematical Methods ", "mathematics 1 ", "Engineering Drawing "); 

    // name of the sem 
    first.nameOfSem("First Year"); 

    //no of subjects and storing marks in the array 
    first.readMarks(8); 

    //calculating avarage 
    first.avarage(); 




/* 
    Year two(" " , " ", " ") 
    second year object 

    */ 
    return 0; 
} 
+2

您是否嘗試在調試器中運行它? (例如gdb)SEGFAULT在哪一行? – Flexo

+0

@awoodland其在線11 – SRN

回答

4
int yearName[]; // array for string marks 
string subjectName[]; // array for storin g subject names 

如果您的編譯器符合標準,則這兩行不應編譯。

使用std::vector

std::vector<int> yearName; 
std::vector<string> subjectName; 

然後用push_back功能元素添加到他們。

Year(string sone, string stwo, string sthree, /*...*/) 
{ 
     subjectName.push_back(sone); 
     subjectName.push_back(stwo); 
     subjectName.push_back(sthree); 
     //so on  
}