2016-01-21 82 views
0

我在編譯c和.h GCC終端(centos linux)中的ATM代碼項目中的代碼收到以下錯誤。請幫助,因爲我是編程新手。error'expected':',',',';','}'或'__attribute__'before'='token&error:expected')'before'va'

validate_acc.h 
#ifndef _VALIDATE_ACC_ 
#define _VALIDATE_ACC_ 

struct validate_acc { 
int user_acc_try, i = 0; 
int user_has_not_entered_right_acc = 1; 
int retries = 3; 
    }; 

typedef struct validate_acc Validate_acc; 




    #endif 

=========================================== ====

validate_acc.c 

#include<stdio.h> 
#include "validate_acc.h" 

    extern int account_number; 

    void (Validate_acc va) 
{ 


va.user_acc_try, va.i = 0; 
va.user_has_not_entered_right_acc = 1; 
va.retries = 3; 



while(va.retries > 0 && va.user_has_not_entered_right_acc == 1){ 
       printf("\nPlease enter your account number: "); 
       scanf("%d", &va.user_acc_try); 

       if(va.user_acc_try != account_number){ 
            printf("You entered the wrong  account  number\n"); 
           va.retries--; 
           } 
       else{ 
       va.user_has_not_entered_right_acc = 0; 
       } 
       } 
} 

====================錯誤

[[email protected] Assignment1]$ gcc -c validate_acc.c 
In file included from validate_acc.c:2:0: 
validate_acc.h:5:23: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token 
    int user_acc_try, i = 0; 
       ^
validate_acc.c:6:20: error: expected ‘)’ before ‘va’ 
void (Validate_acc va) 
+0

'struct'定義中不允許使用初始值設定項。所以你需要從'struct validate_acc'中刪除所有的'='初始值設定項。 –

回答

2

結構聲明不支持初始化,例如正如你試圖提供的那樣。此外,結構對象的初始化器的表達方式與您正在嘗試的方式完全不同。你struct聲明應該有這樣的形式:

struct validate_acc { 
    int user_acc_try; 
    int i; 
    int user_has_not_entered_right_acc; 
    int retries; 
}; 

聲明一個,不(本身)與相關的存儲,你可以初始化任何對象。這就是爲什麼你可以爲它聲明一個類型別名,你已經做了:

typedef struct validate_acc Validate_acc; 

如果要執行該類型的對象的初始化,那麼你必須做對每個對象的基礎上,像這樣:

struct validate_acc validate_object = { 0, 0, 1, 3 }; 

,或者使用typedef ED別名:

validate_acc validate_object = { 0, 0, 1, 3 }; 

也許你的想法是對你的結構的成員提供默認值,但C沒有這樣的功能。您可以創建一個快捷初始化宏,但是,如

#define VALIDATE_ACC_DEFAULTS { 0, 0, 1, 3 } 

。你可以這樣做

struct validate_acc validate_object = VALIDATE_ACC_DEFAULTS; 

這並不縮短在這種情況下的代碼,但它確實使它更清晰。假設您將宏定義放在相同的頭部是結構聲明,它還提供了一箇中心位置,您可以在其中更改默認初始值。

+0

嗨,謝謝你的回覆。但是我在C文件中收到了下面的錯誤信息。請幫助修復C文件。 –

+0

@AtidivyaPatra,你的新問題構成了一個完全獨立的問題,他們應該這樣構成。或者不 - 你可能會找到一個現有的答案,至少有一個沒有太多的工作。 –

相關問題