[英]Comparing a string with a struct member in C
我正在尝试创建一个小票定价系统。 用户输入陪同他们到主题公园的人作为命令行参数(高级/成人/儿童/学生),包括他们自己(根据该列表他们是什么),我将命令行 arguments 与名为 tier 的结构成员进行比较 -这部分将在稍后完成,并提供检查每一个的指针,但在那之前,我只是试图让这个较小版本的已完成程序工作,但似乎无法工作。 它不允许我将结构成员(字符串)与命令行参数进行比较。 我发现纠正这个有点令人困惑,因为错误消息
strcmpare.c:17:29: error: use of undeclared identifier 'senior' if (strcmp(argv[a], senior.tier[a]) == 0)
没有提供任何关于我应该做什么的线索。 这是到目前为止的代码(我使用的是 cs50 课程和沙箱,因此是 cs50.h header 文件。提前道歉,我不确定 C 中的等价物是什么):
#include <cs50.h>
#include <stdio.h>
#include <string.h>
struct ages
{
char tier[7];
int price;
};
void structorganizer(struct ages senior, struct ages adult, struct ages child, struct ages student);
int main(int argc, string argv[])
{
for (int a = 0; a <= (argc-1); a ++)
{
if (strcmp(argv[a], senior.tier[a]) == 0)
{
printf("no errors");
return 0;
}
printf("scrutinise more");
return 1;
}
}
void structorganizer(struct ages senior, struct ages adult, struct ages child, struct ages student)
{
strcpy(senior.tier, "Senior");
senior.price = 10;
strcpy(adult.tier, "Adult");
adult.price = 30;
strcpy(child.tier, "Child");
child.price = 0;
strcpy (student.tier, "Student");
student.price = 20;
}
首先,我认为您应该将结构的声明更改为:(我想以大写开头的结构名称是一个很好的约定)
typedef struct{
char tier[7];
int price;
}Age;
然后在主体中,您必须创建一个新实例,例如:
int main(int argc, string argv[])
{
Age senior;//HERE
for (int a = 0; a <= (argc-1); a ++)
{
if (strcmp(argv[a], senior.tier[a]) == 0)
{
printf("no errors");
return 0;
}
printf("scrutinise more");
return 1;
}
}
如果这样做,还要更改结构组织器 function 中的结构名称,如下所示
void structorganizer(Age senior, Age adult, Age child, Age student)
我发现纠正这个有点令人困惑,因为错误消息没有提供任何关于我应该做什么的线索。
相反,它实际上告诉你该做什么。 错误消息并非总是如此,但在这里。 变量senior
没有声明,所以需要声明。
那么你应该在哪里做。 您似乎想使用structorganizer
来初始化事物。 通常,全局变量是您想要避免的事情,当然有更好的方法来解决这个问题,但只是为了快速让事情正常工作。 从 function 中删除所有 arguments 并在之前声明全局变量,然后在main
中首先调用structorganizer
,如下所示:
struct ages
{
char tier[8]; // Changed to 8 because you need one more than the string length
int price;
};
// Evil global variables, just to make code work with as little
// changes as possible
struct ages senior, adult, ages, child, student;
void structorganizer(); // Init the evil globals
int main(int argc, string argv[])
{
structorganizer();
// Continue as before
这应该足以让代码正常工作,但您显然需要在这里花更多时间了解基础知识。 你现在写的代码对你来说太高级了。 尝试并不羞耻:)
在某些情况下,使用初始化程序 function 是很好的,但我不能说这是其中之一。 我会像这样在main
中声明它们:
int main(int argc, string argv[])
{
struct ages senior = { .tier = "Senior", .price=10 };
struct ages adult = { .tier = "Adult", .price=30 };
struct ages child = { .tier = "Child", .price=0 };
struct ages student = { .tier = "Student", .price=20 };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.