在C中检查登录信息的结构

在C中检查登录信息的结构,c,struct,C,Struct,我必须创建一个程序,只允许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, "pass

我必须创建一个程序,只允许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.");
    }
不幸的是,我出现了错误消息,上面写着“[error]请求非结构或联合中的成员'id'”和'password'的相同错误


如何解决此问题?

您显示的代码中有多个错误

第一个是
record
是一个由指向
struct-nurse
的五个指针组成的数组

它应该是结构对象的数组:

struct nurse { ... } record[5];  // No *, no pointers
第二个问题是没有名为
id
so的变量

scanf("%s", id);
这是行不通的

第三个问题是,当我认为您打算使用标准函数时,您使用了未知函数strcopy

第四个问题是structures
id
成员只能包含四个字符串,因为空终止符需要一个元素。然后尝试将(在所示示例中)更长的字符串复制到该数组中

第五个问题是不能使用
==
=以比较字符串。您应该使用该函数来比较字符串

第六个问题是结构的
password
成员是一个数组数组,您试图将字符串复制到
password
,因为它是单个字符串

第七个问题是将结构
id
成员视为字符串和单个整数值。不可能两者都有

可能会有更多的问题,但这些问题应该足够好开始

总而言之,您似乎缺少一些基本的C语言知识,可能需要几本书来阅读或上课。

之所以出现“非结构或联合”错误,是因为
record.id
中的
record
类型不是结构或联合
record
是指向
struct
的5个指针数组,因此正确的语法应该是
record[0]->id
。但是您可能不需要指针数组,因此如果将
*记录[5]
更改为
记录[5]
,您可以将第一条记录的
id
作为
记录[0].id
记录->id
访问

实际上,在程序的每一行中都有许多其他问题,因此我只能建议花更多的时间学习C的基础知识

一般来说,C是一个相当简洁和小的语言,所以仔细考虑每个符号的含义(例如,额外的<代码> */COD>使所有的区别)在你输入之前。而不是在整个代码中分散文字数字(如
5
8
),而是定义
常量并使用它们。例如,现在还不清楚
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];

(以后您可能会选择使用比这更简洁的样式,但在开始时,我认为最好是明确的。)

您不能通过尝试和错误来编程。你必须知道你写的每一行都是做什么的。没有名为
strcopy
的函数。您没有声明名为
id
的变量。您已将
record
声明为指向结构的单元化指针数组,并且从未将这些指针设置为指向任何位置。等等这段代码没有分类,你必须研究数组和指针,然后再研究字符串。