2017-06-25 71 views
-1

我想接受卷號,標記在2個科目並添加標記和顯示邏輯錯誤我得到意想不到的結果

他們但程序不會超過1學生的細節。

這個程序不花費超過40名學生 我使用的代碼塊IDE編程

Please see this image for output screen

請幫助!

#include<iostream> 
#include<conio.h> 
#include<stdlib.h> 
using namespace std; 
int sum1[40]; 
int roll[40]; 
int n; 
class Sb1; 
class Sb2; 
class Sb1 
{ 
    public: 
    float marks1[40]; 
    void markssb1() 
    { 
     for(int i=0;i<n;i++) 
     { 
     cout<<"Enter Marks in subject 1 \n"; 
     cin>>marks1[40]; 
     } 
    } 
    friend void sum(Sb1,Sb2); 
}; 
class Sb2 
{ 
    public: 
    float marks2[40]; 
    void markssb2() 
    { 
     for(int i=0;i<n;i++) 
     { 
     cout<<"Enter Marks in subject 2 \n"; 
     cin>>marks2[40]; 
     } 
    } 
    friend void sum(Sb1,Sb2); 
}; 
void sum(Sb1 obj1,Sb2 obj2) 
{ 
    for(int i=0;i<n;i++) 
    { 
     sum1[i]=obj1.marks1[i]+obj2.marks2[i]; 
    } 
} 
void display() 
{ 
    cout<<"Serial Number\t\t\tRoll Number\t\t\tTotal Marks\n"; 
    cout<<"----------------------------------------------------------------------------\n"; 
    for(int i=0;i<n;i++) 
    { 
     cout<<i+1<<"\t\t\t\t"<<roll[i]<<"\t\t\t\t"<<sum1[i]<<endl; 
    } 
} 
int main() 
{ 
    Sb1 obj1; 
    Sb2 obj2; 
    cout<<"Enter number of students (Maximum 40 students)\n"; 
    cin>>n; 
    if(n<=40) 
    { 
     for(int i=0;i<n;i++) 
     { 
      cout<<"Enter Roll Number of student "<<i+1<<endl; 
      cin>>roll[i]; 
      obj1.markssb1(); 
      obj2.markssb2(); 
      sum(obj1,obj2); 
     } 
     display(); 
    } 
    else 
    { 
     cout<<"Number of students entered exceed 40\n"; 
    } 
    return 0; 
    getch(); 
} 
+0

修改其操作數的求和函數是不好的設計。按引用傳遞並按值返回。 – StoryTeller

+0

診斷此類問題的正確工具是調試器,而不是SO問題。如果你是新手,你應該閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)節目。 – StoryTeller

+0

@StoryTeller謝謝我是編程新手! [鏈接](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)它的一個很好的閱讀感謝它。 –

回答

1

一個初始的錯誤,我可以看到的是你的代碼

for(int i=0;i<n;i++) 
    { 
    cout<<"Enter Marks in subject 1 \n"; 
    cin>>marks1[40]; 
    } 

你每次服用輸入僅爲第41指數的這一部分。 正確它應該是

for(int i=0;i<n;i++) 
    { 
    cout<<"Enter Marks in subject 1 \n"; 
    cin>>marks1[i]; 
    } 

對於第二類也是一樣。

然後第二部分也有錯誤。

for(int i=0;i<n;i++) 
     { 
      cout<<"Enter Roll Number of student "<<i+1<<endl; 
      cin>>roll[i]; 
      obj1.markssb1(); 
      obj2.markssb2(); 
      sum(obj1,obj2); 
     } 
    display(); 

這是爲所有'n'學生輸入主題標記輸入,每次輸入roll no時。 糾正代碼的一種方法是 -

 for(int i=0;i<n;i++) 
     { 
      cout<<"Enter Roll Number of student "<<i+1<<endl; 
      cin>>roll[i]; 

     } 
    obj1.markssb1(); 
    obj2.markssb2(); 
    sum(obj1,obj2); 
+0

感謝它解決了我的問題 –

+0

@GarvitKothari我編輯了一些更多,請檢查出來! – julianff

相關問題