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