c - 如何在函数中使用指针结构?
问题描述
#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() 上的代码来处理这个特定结构的变量?
解决方案
如果要使用指针访问结构字段,请使用 -> 运算符:
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;