2012-12-18 258 views
-1

輸出必須是指向結構的指針

Student Number: 93745; 
Grade Point Ave:2.9; 
Sex (M or F):'M'; 

,但我不能讓那些需要的輸出,請點錯誤代碼,並幫助解決它,謝謝!

#include <stdio.h> 
struct student { 
int num;  
double gpa; 
char sex; 
}; 

void printstudent(struct student *p); /* prototype */ 

int main() { 
/* allocate storage and initialize it */ 
struct student joe,*kim; 
kim=&joe; 

kim->num = 93745; 
kim->gpa = 2.9; 
kim->sex = 'M'; 


printstudent(joe); 

} 


void printstudent(struct student *p) { 
printf("Student Number: %i\n", p->num); 
printf(" Grade Point Ave: %0.2f\n",p->gpa); 
printf(" Sex (M or F): %c\n\n", p->sex); 
} 
+1

'printstudent(JOE);'應該是'printstudent(&joe);' –

+1

另外,什麼是點使用'kim'變量在所有 – 2012-12-18 14:41:55

+0

爲什麼在喬金點好像混淆..? – Mike

回答

2
printstudent(joe); 

試圖解釋joe作爲指針(類型struct student的值)。您需要通過kim&joe

0
printstudent(joe); 

應該是

printstudent(kim); 

printstudent(&joe); 

由於函數採用一個指針於該結構。

0

我想指出的是,我們沒有理由在這裏使用指針:

int main() { 
    /* allocate storage and initialize it */ 
    struct student joe; 

    joe.num = 93745; 
    joe.gpa = 2.9; 
    joe.sex = 'M'; 

    printstudent(joe); 
    return 0; 
} 


void printstudent(struct student p) { 
    printf("Student Number: %i\n", p.num); 
    printf(" Grade Point Ave: %0.2f\n",p.gpa); 
    printf(" Sex (M or F): %c\n\n", p.sex); 
} 

會工作得很好。

0

假設你的程序被通過自動化系統,迂腐檢查程序的輸出與預期輸出拒絕,你有以下問題:M爲性輸出周圍

  1. 單引號必須是自己添加。他們將而不是%c printf說明符生成。
  2. 打印的第二行和第三行的空格比我在所需輸出中看到的要多(特別是在行首和冒號後面)
  3. 您不打印預期的分號行結束。