簡體   English   中英

在 C 中檢查登錄信息的結構

[英]Structs to check login information in C

我必須創建一個程序,它只允許 5 人使用預定的用戶 ID 和密碼登錄。 我認為在函數中定義它們然后將它們保存在結構中將是最好的方法。 到目前為止,我有:

    struct nurse
{
    char id[5];
    char password[5][8];
}*record[5];

int main(void)
{

    record.id=1;
    strcopy(record.id, "username");
    strcopy(record.password, "password");

    printf("Please Enter your username: ");
    scanf("%s", id);
    if (id != username)
    {
        printf("Error. Record not found.");
    }

不幸的是,我想出了錯誤消息,說“[錯誤] 在非結構或聯合的東西中請求成員‘id’”和“密碼”同樣的錯誤。

我該如何解決這個問題?

您顯示的代碼中有多個錯誤。

第一個是record是一個包含五個指向struct nurse指針的數組。

它應該是一個結構對象數組:

struct nurse { ... } record[5];  // No *, no pointers

第二個問題是你沒有一個名為id的變量所以

scanf("%s", id);

不管用。

第三個問題是您使用了未知函數strcopy ,當我相信您的意思是使用標准strcpy函數時。

第四個問題是結構id成員只能包含四個字符的字符串,因為空終止符需要一個元素。 並且您嘗試將(在所示示例中)一個更長的字符串復制到該數組中。

第五個問題是你不能使用==!=來比較字符串。 您應該使用strcmp函數來比較字符串。

第六個問題是結構體的password成員是一個數組數組,您嘗試將一個字符串復制到password因為它是單個字符串。

第七個問題是您將結構id成員視為字符串和單個整數值。 不能兩者兼而有之。

可能還有更多問題,但這些應該足以開始。

總而言之,您似乎缺少一些基本的 C 知識,並且可以使用幾本書來閱讀或上課。

“不是結構或聯合”錯誤是因為record.idrecord類型不是結構或聯合。 record是一個包含 5 個指向struct指針的數組,因此正確的語法是record[0]->id 但是您可能不想要指針數組,因此如果您將*record[5]更改為record[5] ,您可以訪問第一條記錄的id作為record[0].idrecord->id

程序的幾乎每一行都存在許多其他問題,所以我只能建議花更多時間學習 C 的基礎知識。

一般來說,C 是一種相當簡潔和小型的語言,所以在輸入之前仔細考慮每個符號的含義(例如,一個額外的*使一切不同)。而不是散布文字數字(如58 )您的代碼,# #define常量並使用它們。 例如,現在不清楚id[5]是否有5是因為您希望總共有五個 id,還是因為您希望每個單獨的 id 有五個字符長(在這種情況下,您缺少 NUL 的空間,或零,終止符)。 例如:

#define NUM_RECORDS 5
#define ID_LENGTH 5
#define PASSWORD_LENGTH 8

struct nurse {
    char id[ID_LENGTH + 1];
    char password[PASSWORD_LENGTH + 1];
} record[NUM_RECORDS];

(你以后可能會選擇使用比這更簡潔的風格,但在開始時,我認為最好是明確的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM