[英]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.id
的record
類型不是結構或聯合。 record
是一個包含 5 個指向struct
指針的數組,因此正確的語法是record[0]->id
。 但是您可能不想要指針數組,因此如果您將*record[5]
更改為record[5]
,您可以訪問第一條記錄的id
作為record[0].id
或record->id
。
程序的幾乎每一行都存在許多其他問題,所以我只能建議花更多時間學習 C 的基礎知識。
一般來說,C 是一種相當簡潔和小型的語言,所以在輸入之前仔細考慮每個符號的含義(例如,一個額外的*
使一切不同)。而不是散布文字數字(如5
和8
)您的代碼,# #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.