如何在函数中使用指针结构? #包括 比尔赫特结构{ 内霍里奥因特拉达; 内霍拉里奥赛达; int-preco; minEntrada国际酒店; 明塞达国际酒店; 内霍拉赛达; 内霍兰塔达; }; void extrairHoraMin(struct bilhete*a){///HERE a、 minEntrada=a.horarioEntrada%100; a、 Horacentrada=a.Horacioentrada/100; a、 minSaida=a.horarioSaida%100; a、 horaSaida=a.horaSaida/100; } int obterIntervalo(结构比尔赫特a){ intb=a.horentrada*60+a.minEntrada; INTC=a.horaSaida*60+a.minSaida; 返回c-b; } int obterValorEstacionamento(int a){ 如果(a15&&a60&&a=0) { 做 { scanf(“%d”,&bilhetes[contadorCarros].horarioSaida); } while(bilhetes[contadorCarros].horarioSaidab,a结构->c); } 内部主(空){ 结构A arr[10]; 对于(int i=0;isomething=somethingElse代替a.something=somethingElse试试?不过,我不确定我是否理解你的问题。 #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; }

如何在函数中使用指针结构? #包括 比尔赫特结构{ 内霍里奥因特拉达; 内霍拉里奥赛达; int-preco; minEntrada国际酒店; 明塞达国际酒店; 内霍拉赛达; 内霍兰塔达; }; void extrairHoraMin(struct bilhete*a){///HERE a、 minEntrada=a.horarioEntrada%100; a、 Horacentrada=a.Horacioentrada/100; a、 minSaida=a.horarioSaida%100; a、 horaSaida=a.horaSaida/100; } int obterIntervalo(结构比尔赫特a){ intb=a.horentrada*60+a.minEntrada; INTC=a.horaSaida*60+a.minSaida; 返回c-b; } int obterValorEstacionamento(int a){ 如果(a15&&a60&&a=0) { 做 { scanf(“%d”,&bilhetes[contadorCarros].horarioSaida); } while(bilhetes[contadorCarros].horarioSaidab,a结构->c); } 内部主(空){ 结构A arr[10]; 对于(int i=0;isomething=somethingElse代替a.something=somethingElse试试?不过,我不确定我是否理解你的问题。 #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; },c,C,我在问题的有关部分加上“///HERE” 我需要让函数extrairHoraMin()接收指向结构的指针,并允许我处理相关结构的元素以及结构的其他变量的属性值 不需要更改main()函数,因此如何仅通过更改extrairHoraMin()上的代码来处理此特定结构的变量?如果要使用指针使用->运算符访问结构字段: #include <stdio.h> struct bilhete{ int horarioEntrada; int horarioSaida;

我在问题的有关部分加上“///HERE”

我需要让函数extrairHoraMin()接收指向结构的指针,并允许我处理相关结构的元素以及结构的其他变量的属性值


不需要更改main()函数,因此如何仅通过更改extrairHoraMin()上的代码来处理此特定结构的变量?

如果要使用指针使用->运算符访问结构字段:

  #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;
}
编译器应向您发出警告:

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;
}

在c语言中,当有指向结构的指针时,要访问字段,需要使用
->
操作符

t.c:14:6: error: member reference type 'struct bilhete *' is a pointer; did you mean to use '->'?
    a.minEntrada = a.horarioEntrada%100;
我不太熟悉变量和函数所使用的语言。但这里有一个完整的英语工作示例,它应该演示这些概念

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;
}
#包括
结构A{
int b;
INTC;
};
无效打印机(结构A*A_结构){
printf(“%d%d\n”,a结构->b,a结构->c);
}
内部主(空){
结构A arr[10];
对于(int i=0;i<10;i++){
arr[i].b=i;
arr[i].c=i;
}
打印机(&arr[3]);
返回0;
}

用a->something=somethingElse代替a.something=somethingElse试试?不过,我不确定我是否理解你的问题。
#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;
}