嗨,大家好,我是同事,我必须在c中做一个程序来模拟维修商店中的票证系统。
我使这基本上就像每种票证都有结构一样。
这是一个例子。
typedef struct reparacao
typedef struct entrega
{
char servico_ent;
int numtick_ent;
int dia_entrada_ent;
int mes_entrada_ent;
int ano_entrada_ent;
int hora_entrada_ent;
int min_entrada_ent;
int hora_atend_ent;
int min_atend_ent;
int balcao_ent;
char cond_ent[100];
float valor_pagar;
};
entrega entrega1[100];
然后我写信以获得时间
`time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("%d-%d-%d %d:%d\n", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min);
// verificar se o horário está entre as 8H e as 22H
if(tm.tm_hour<8 || tm.tm_hour>=22)
{
printf("\nNao pode recolher ticket. Horario: 8:00h-21:59h\n\n");
}else
{
//Guardar dados no vetor
printf("Ticket numero %d\n\n", natend_ent);
entrega1[j].numtick_ent = natend_ent;
entrega1[j].servico_ent = 'Entrega';
entrega1[j].dia_entrada_ent = tm.tm_mday;
entrega1[j].mes_entrada_ent = tm.tm_mon+1;
entrega1[j].ano_entrada_ent = tm.tm_year + 1900;
entrega1[j].hora_entrada_ent = tm.tm_hour;
entrega1[j].min_entrada_ent = tm.tm_min;
natend_ent++;
j++;
}`
什么会导致错误“在结构或联合体中请求成员'blablabla'”?
答案 0 :(得分:0)
您已将entrega1
声明为元素类型为entrega
的数组,但是所提供的代码未定义类型entrega
,尤其是该标识符未定义为表示结构类型。您的编译器也应该对此抱怨。通常最好是从顶部开始处理警告和错误,因为一个地方的错误代码会导致多个错误的情况并不少见。
特别是在这种情况下,您的typedef
关键字没有任何作用,因为您没有声明要应用的标识符。也许您有一个相对普遍的误解,认为typedef
用于定义新类型,尤其是结构类型。它不是。它用于为类型定义别名。您拥有声明的类型为struct entrega
(struct
关键字是类型名称的一部分),您可以在任何地方使用它。如果您希望能够省略struct
部分,那么对该类型使用typedef的正确方法是:
typedef struct entrega {
char servico_ent;
/* ... other members ... */
float valor_pagar;
} entrega;
等效地,您可以将typedef与结构定义分开:
struct entrega {
char servico_ent;
/* ... other members ... */
float valor_pagar;
};
typedef struct entrega entrega;
后者可能比前者更具启发性。允许您交换typedef
的顺序和结构定义也可能是有益的。