2012-11-19 62 views
0

所以我通過搜索這個網站徹底瀏覽了主題,但是找不到可以幫助我的東西。如何從C++中的函數返回結構

我正在爲我的朋友做一個任務,讓我告訴你,自從我使用C++以來已經有一年或更長的時間了。

所以我面臨的問題是指針和返回結構通過指針。

這裏的代碼如下:

#include <stdio.h> 
#include <conio.h> 
#include <iostream.h> 

    struct student 
    { 
    int SUB[3]; 
    }; 

    struct AVGPCT 
    { 
    float avg; 
     float pct; 
    }; 


AVGPCT* CALC(student *A) 
{ 
    int x,y; 
    AVGPCT D[5]={0.0,0.0,0.0,0.0,0.0}; 

    for(x=0;x<5;x++) 
    { 
    for(y=0;y<3;y++) 
     { 
     D[x].avg+=A[x].SUB[y]; 
     D[x].pct+=A[x].SUB[y]; 
     } 
    } 

    for(x=0;x<5;x++) 
    { 
    D[x].avg/=2; 
     D[x].pct/=300; 
    } 
    return (D); 
} 

void main(void) 
{ 
    int i,j; 
    student S[5]; 
    AVGPCT *V; 

    for(i=0;i<5;i++) 
    { 
    for(j=0;j<3;j++) 
     { 
     cout << "Enter Marks Of Subject[" << (j+1) << "] Of Student [" << (i+1) <<"] [Max=100]:"; 
     cin >> S[i].SUB[j]; 
     } 
    } 

    V = CALC(S); 
    cout << "Average Number Of Student [1]: " << V->avg; 
    cout << (*V).pct; 

    getch(); 
} 

現在的問題是,它給我一時間難以從位置檢索正確的價值觀。

我想用V ++增加指針。有趣的是,如果我使用的是正確打印值:

cout << V->avg; 
cout << V->pct; 
V++; 
cout << V->avg; 
cout << V->pct; 

依此類推。但是,如果我使用循環或者寫一行代碼或者使用endl或\ n,那麼這些值就會出現混亂並出現亂碼值。

那麼在這裏會出現什麼問題呢?

重要的是我使用結構,也請根據代碼引導。

+0

所以你想要的建議,但..你不需要建議? –

+0

抱歉不清楚,我的意思是不拆掉我的代碼,並建議/建議完全不同的東西。 –

+0

我會繼續前進。 –

回答

2

看起來這行

AVGPCT D[5]={0.0,0.0,0.0,0.0,0.0}; 

聲明數組d局部的功能CALC()

你傳遞一個指針數組回的主要功能,但數組被標記爲免費遊戲當功能結束時覆蓋。在程序中做的東西越多,這個位置在內存中的機會被覆蓋的可能性就越大,儘管很難說什麼時候會發生。因此,有時你會擺脫它,其他時候你不會。

在給予你建議的風險,它可能會更好申報主D地方和一個指向它傳遞到函數或使用該函數內newmalloc並將所得指針傳遞回來。

+0

Thanx mate,我完全忽略了我在函數中本地聲明它。 解決了它。 :) –

+0

沒問題,@MajorAly,會發生。如果這解決了你的事情,隨時讓它成爲你接受的答案。 ;-) – Richard

4

返回指向棧上數據的指針不起作用。改爲使用std:vector<AVGPCT>並按值返回,而不是通過指針。與Java或C#不同,C++基於值而不是指針。

C++不允許從main()返回void

標題<iostream.h>根據C++標準不存在。標準標題是<iostream>