#include <stdio.h>
struct bilhete{
int horarioEntrada;
int horarioSaida;
int preco;
int minEntrada;
int minSaida;
int horaSaida;
int horaEntrada;
};
void extrairHoraMin(struct bilhete *a){ ///////////HERE
a.minEntrada = a.horarioEntrada%100;
a.horaEntrada = a.horarioEntrada/100;
a.minSaida = a.horarioSaida%100;
a.horaSaida = a.horarioSaida/100;
}
int obterIntervalo(struct bilhete a){
int b = a.horaEntrada*60+a.minEntrada;
int c = a.horaSaida*60+a.minSaida;
return c-b;
}
int obterValorEstacionamento(int a){
if(a<=15){return 0;}
else if(a>15&&a<=60){return a*30;}
else if(a>60&&a<=120){return 60*30+(a-60)*20;}
else {return 60*30+60*20+(a-120)*10;}
}
int main()
{
struct bilhete bilhetes[100];
int contaCentavos, intervalo, receita=0;
int contadorCarros=0, i, total=0;
scanf("%d", &bilhetes[contadorCarros].horarioEntrada);
while (bilhetes[contadorCarros].horarioEntrada>=0)
{
do
{
scanf("%d", &bilhetes[contadorCarros].horarioSaida);
}
while(bilhetes[contadorCarros].horarioSaida < bilhetes[contadorCarros].horarioEntrada);
extrairHoraMin(&bilhetes[contadorCarros]); ///////////AND HERE TOO
intervalo = obterIntervalo(bilhetes[contadorCarros]);
contaCentavos = obterValorEstacionamento(intervalo);
bilhetes[contadorCarros].preco = contaCentavos;
printf("Entrada\n%02d:%02d\nSaida\n%02d:%02d\nDuracao(min)\n%d\nPreco(centavos)\n%d\n",bilhetes[contadorCarros].horaEntrada, bilhetes[contadorCarros].minEntrada, bilhetes[contadorCarros].horaSaida, bilhetes[contadorCarros].minSaida,intervalo, bilhetes[contadorCarros].preco);
total += contaCentavos;
contadorCarros++;
scanf("%d", &bilhetes[contadorCarros].horarioEntrada);
}
printf("Faturamento total (centavos)\n%d\n", total);
int inicioIntervalo, finalIntervalo;
scanf("%d", &inicioIntervalo);
do
{
scanf("%d", &finalIntervalo);
}
while (finalIntervalo < inicioIntervalo);
for (i = 0; i < contadorCarros ; i++)
{
if (bilhetes[i].horarioSaida>inicioIntervalo && bilhetes[i].horarioSaida< finalIntervalo)
{
receita += bilhetes[i].preco;
}
}
printf("\nFaturamento no periodo (centavos)\n%d\n", receita);
return 0;
}
我用“///////// HERE”标记了问题的相关部分。
我需要使函数extrairHoraMin()接收一个指向结构的指针,并允许我使用结构中的结构元素和属性值来处理结构的其他变量。
不需要更改main()函数,那么如何通过更改extrairHoraMin()上的代码来处理这个特定结构的变量呢?
答案 0 :(得分:1)
如果要使用指针使用访问struct字段 - &gt;操作者:
void extrairHoraMin(struct bilhete *a){ ///////////HERE
a->minEntrada = a->horarioEntrada%100;
a->horaEntrada = a->horarioEntrada/100;
a->minSaida = a->horarioSaida%100;
a->horaSaida = a->horarioSaida/100;
}
编译器应该给你警告:
t.c:14:6: error: member reference type 'struct bilhete *' is a pointer; did you mean to use '->'?
a.minEntrada = a.horarioEntrada%100;
答案 1 :(得分:1)
在c中,当你有一个指向结构的指针时,要访问这些字段,你需要使用->
运算符。
void extrairHoraMin(struct bilhete *a){ ///////////HERE
a.minEntrada = a->horarioEntrada%100;
a.horaEntrada = a->horarioEntrada/100;
a.minSaida = a->horarioSaida%100;
a.horaSaida = a->horarioSaida/100;
}
我并不熟悉你的变量和函数所使用的语言。但是这里有一个完整的英语示例,这应该展示概念。
#include <stdio.h>
struct A {
int b;
int c;
};
void printer(struct A* a_struct){
printf("%d %d\n", a_struct->b, a_struct->c);
}
int main(void) {
struct A arr[10];
for (int i = 0; i < 10; i++){
arr[i].b = i;
arr[i].c = i;
}
printer(&arr[3]);
return 0;
}