繁体   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