[英]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.