2015-12-31 99 views
0

我的嵌套結構程序發送錯誤。嵌套結構程序使用C

這裏我使用了兩種結構。

#include <stdio.h> 

void main() 
{ 
    struct time 
    { 
     int min; 
     int hour; 
     int sec; 
    }; 

    struct t 
    { 
     int c; 
     struct time t1; 
     struct time t2; 
    }p; 

    scanf("%d", &p.c); 
    scanf("%d%d%d", &p.t1.minute, &p.t1.hour, &p.t1.second); 
    scanf("%d%d%d", &p.t2.minute, &p.t2.hour, &p.t2.second); 

    printf("%d%d%d", p.p1.min, p.p1.hour, p.p1.sec); 
    printf("%d%d%d", p.p2.min, p.p2.hour, p.p2.sec); 
} 

運行此代碼後,我得到以下錯誤。

struct time’ has no member named ‘minute’ 
nested.c:17: error: ‘struct time’ has no member named ‘second’ 
nested.c:18: error: ‘struct time’ has no member named ‘minute’ 
nested.c:18: error: ‘struct time’ has no member named ‘second’ 
+1

我明白你是一個初學者,但嘗試使用你在定義中使用的同名:t1.min,t1.sec等 – HAL9000

+1

結構成員是'min'和'sec',但你可以訪問'minute'和'秒'。 –

+0

我瞭解編譯器警告和錯誤消息可能會不時變得模糊。但是在這種情況下:_「struct time沒有名爲second的成員」_應該提示您查看'struct time'的定義,並且應該能夠推斷出它的成員確實不會被稱爲'second'或「分鐘」,但是「分鐘」和「秒」。只需在第17行和第18行分別用'sec'和'min'代替'second'和'minute'。這不是火箭科學 –

回答

1
#include <stdio.h> 
void main() 
{ 
struct time 
{ 
int minute; // change here 
int hour; 
int second; // change here 
}; 

struct t 
{ 
int c; 
struct time t1; 
struct time t2; 
}p; 

scanf("%d",&p.c); 
scanf("%d%d%d",&p.t1.minute,&p.t1.hour,&p.t1.second); 
scanf("%d%d%d",&p.t2.minute,&p.t2.hour,&p.t2.second); 

printf("%d%d%d",p.t1.minute,p.t1.hour,p.t1.second); 
printf("%d%d%d",p.t2.minute,p.t2.hour,p.t2.second); 
} 

應該修復它 - 如果事情是不存在的,它不能被發現;)

+2

struct t'沒有名爲'p1'的成員 nested.c:22:錯誤:'struct t'沒有成員名爲'p1' nested.c:22:error:'struct t'has no member named'p1 ' nested.c:23:error:'struct t'has no member named'p2' nested.c:23:error:'struct t'has no member named'p2' nested.c:23:error: 'struct t'沒有名爲'p2'的成員 –

+0

將p1和p2更改爲t1和t2 – progsource

0

可能是這樣的代碼將幫助您

#include <stdio.h> 

struct Employee 
{ 
    char ename[20]; 
    int ssn; 
    float salary; 
    struct date 
     { 
     int date; 
     int month; 
     int year; 
     }doj; 
}emp = {"amit",100,2000.50,{22,6,1990}}; 

int main(int argc, char *argv[]) 
{ 
printf("\nEmployee Name : %s",emp.ename); 
printf("\nEmployee SSN : %d",emp.ssn); 
printf("\nEmployee Salary : %f",emp.salary); 
printf("\nEmployee DOJ : %d/%d/%d", \ 
     emp.doj.date,emp.doj.month,emp.doj.year); 

return 0; 
} 
1

的錯誤是相當清楚,所以我會讓你解釋他們的意思。但是,如果您在閱讀此答案後對錯誤的含義感到困惑,請隨時在評論中提出問題,我會盡力解決它。

struct time您已聲明會員minsec,縮寫形式爲minutesecond

但是,在下面的代碼中,您使用了非縮寫形式minutesecond;這是你的編譯器抱怨的。爲了方便起見,我在下面的代碼對準你的錯誤:

//   change minute to min   vvvvvv 
scanf("%d%d%d",&p.t1.minute,&p.t1.hour,&p.t1.second); 
//     ^^^^^^   change second to sec 

scanf("%d%d%d",&p.t2.minute,&p.t2.hour,&p.t2.second); // Repeat the process for this line 

我也強烈建議使用int main(void)而不是void main(),因爲前者是嚴格符合標準的,而後者是沒有,但你的編譯器可以選擇支持後者作爲延伸。

檢查返回值scanf也可能是一個好主意。對於您希望讀取三個值的調用,成功時返回值應爲3。如果是2,那麼你只能依靠前兩個值;第三個將是垃圾。如果是EOF,那麼你的文件已達到最終的文件或錯誤條件,你應該停止嘗試從中讀取數據,或者rewind/fsetpos/fseek ...

0

有沒有名爲分秒變量你的「時間」結構。您已分別命名它們秒和min。