2017-04-26 9 views
2

構造体を作成し、InitiateAで初期化し、DisplayAで印刷してMainで呼び出すとします。私はそれをしようとしたが、何も動作していないようです?構造体を初期化して関数を呼び出してメインに表示する方法

#include <string.h> 

struct Penalty{ 
    // Provide structure definition for Penalty here 
    double fine; 
    char Identity[20]; 
    int i; 
}; 

void InitiateA (struct Penalty data[]); 
void DisplayA (struct Penalty data[]); 

int main(){ 

    struct Penalty rule[3]; 
    struct i; 

    DisplayA(rule); 

    rule[0].fine = 20.00; 
    strcpy(rule[0].Identity, "Student"); 

    rule[1].fine = 30.00; 
    strcpy(rule[1].Identity , "Staff"); 

    rule[2].fine = 50.00; 
    strcpy(rule[2].Identity , "Vendor"); 

    for(i=0;i<3;i++) { 
    printf("%d%s",rule[i].fine,rule[i].Identity); 
    } 

    return 0; 
} 

私は

void InitiateA (struct Penalty data[]){ 
    //intialize data here. 
    printf("identity\n"); 
    printf("%d",rule[i].Identity); 
    return; 
} 

void DisplayA (struct Penalty data[]){ 
    //display data here 
    printf("Fine : RM %d\n", data[i].fine); 
    return; 
} 

main関数に、この関数を呼び出す方法については、私は間違ってそれをやったかわかりませんか。?

+0

void関数内にreturn文を記述しないでください。 – Lundin

答えて

0

これはInitiateA()で、エラーです:

printf("%d",rule[i].Identity); 

あなたは

printf("%d", data[i].Identity); 

を意味しますが、変数ruleを参照することができない、それはその時点でスコープではありません(それはmain()にローカルです)。

あなたはmain()から、このようにそれを呼び出す必要があります:

InitiateA(rule); 
0

私はそれをみんなを完了するために管理!

#include <string.h> 
#include <stdio.h> 
struct Penalty{ 

double fine; 
char Identity[20]; 
}; 

void InitiateA (struct Penalty data[]); 
void DisplayA (struct Penalty data[]); 


int main(){ 

struct Penalty rule[3]; 

InitiateA(rule); 
DisplayA(rule); 

system ("pause"); 

} 

void InitiateA (struct Penalty data[]){ 
    data[0].fine = 20.00; 
strcpy(data[0].Identity, "Student"); 

data[1].fine = 30.00; 
strcpy(data[1].Identity , "Staff"); 

data[2].fine = 50.00; 
strcpy(data[2].Identity , "Vendor"); 

} 

void DisplayA (struct Penalty data[]){ 
    int i; 
for(i=0;i<3;i++){ 
printf("%s %.2f \n",data[i].Identity, data[i].fine); 
} 
} 
関連する問題