在C中检查登录信息的结构
我必须创建一个程序,只允许5个人以预定的用户ID和密码登录。我认为在函数中定义它们,然后将它们保存在结构中是最好的方法。到目前为止,我已经:在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
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
第四个问题是structuresid
成员只能包含四个字符串,因为空终止符需要一个元素。然后尝试将(在所示示例中)更长的字符串复制到该数组中
第五个问题是不能使用==
或=代码>以比较字符串。您应该使用该函数来比较字符串
第六个问题是结构的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
声明为指向结构的单元化指针数组,并且从未将这些指针设置为指向任何位置。等等这段代码没有分类,你必须研究数组和指针,然后再研究字符串。