繁体   English   中英

将字符串与 C 中的结构成员进行比较

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM