es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usando el operador de flecha para calcular el promedio de 3 miembros de una estructura, es necesario convertir el operador de punto en operador de flecha.

Estoy practicando C y acabo de aprender cómo asignar enteros y crear estructuras, me encontré con el operador flecha y no sé cómo aplicarlo. Investigué un poco y ahora sé que a->b es lo mismo que (*a).b y que la flecha se utiliza para punteros. Mi pregunta es cómo puedo convertir este código para usar el operador flecha en su lugar. Intenté cambiar los miembros de int a int *, pero aún no funciona.

“`c
#include <stdio.h>
#include <string.h>

struct student {
char name[10];
int chem_marks;
int maths_marks;
int phy_marks;
};

int main()
{
struct student ahmad;
struct student ali;
struct student abu_abbas;

<pre><code>strcpy(ahmad.name, "ahmad");
ahmad.chem_marks = 25;
ahmad.maths_marks = 50;
ahmad.phy_marks = 90;

strcpy(ali.name, "ali");
ali.chem_marks = 29;
ali.maths_marks = 90;
ali.phy_marks = 13;

strcpy(abu_abbas.name, "abu");
abu_abbas.chem_marks = 50;
abu_abbas.maths_marks = 12;
abu_abbas.phy_marks = 80;

int ahmad_avg = (ahmad.chem_marks + ahmad.maths_marks + ahmad.phy_marks) / 3;
int ali_avg = (ali.chem_marks + ali.maths_marks + ali.phy_marks) / 3;
int abu_abbas_avg = (abu_abbas.chem_marks + abu_abbas.maths_marks + abu_abbas.phy_marks) / 3;

printf("%s ", ahmad.name);
printf("average:%d\n", ahmad_avg);
printf("%s ", ali.name);
printf("average:%d\n", ali_avg);
printf("%s ", abu_abbas.name);
printf("average:%d\n", abu_abbas_avg);

return 0;
</code></pre>

}
“`</string.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir el código para usar el operador de flecha, primero necesitamos asignar memoria para los punteros de la estructura, porque el operador de flecha solo se puede usar con punteros. Luego podemos reemplazar todos los operadores de punto con operadores de flecha. Aquí está el código modificado:

    #include <stdio.h>
    #include <string.h>
    
    struct alumno {
        char nombre[10];
        int cal_quimica;
        int cal_mates;
        int cal_fisica;
    };
    
    int main() {
        struct alumno *ahmad = malloc(sizeof(struct alumno));
        struct alumno *ali = malloc(sizeof(struct alumno));
        struct alumno *abu_abbas = malloc(sizeof(struct alumno));
    
        strcpy(ahmad->nombre, "ahmad");
        ahmad->cal_quimica = 25;
        ahmad->cal_mates = 50;
        ahmad->cal_fisica = 90;
    
        strcpy(ali->nombre, "ali");
        ali->cal_quimica = 29;
        ali->cal_mates = 90;
        ali->cal_fisica = 13;
    
        strcpy(abu_abbas->nombre, "abu");
        abu_abbas->cal_quimica = 50;
        abu_abbas->cal_mates = 12;
        abu_abbas->cal_fisica = 80;
    
        int promedio_ahmad = (ahmad->cal_quimica + ahmad->cal_mates + ahmad->cal_fisica) / 3;
        int promedio_ali = (ali->cal_quimica + ali->cal_mates + ali->cal_fisica) / 3;
        int promedio_abu_abbas = (abu_abbas->cal_quimica + abu_abbas->cal_mates + abu_abbas->cal_fisica) / 3;
    
        printf("%s  ", ahmad->nombre);
        printf("promedio:%d\n", promedio_ahmad);
        printf("%s ", ali->nombre);
        printf("promedio:%d\n", promedio_ali);
        printf("%s ", abu_abbas->nombre);
        printf("promedio:%d\n", promedio_abu_abbas);
    
        free(ahmad);
        free(ali);
        free(abu_abbas);
    
        return 0;
    }
    

    En este código, primero asignamos memoria para los punteros ahmad, ali y abu_abbas utilizando la función malloc(). Reemplazamos todos los operadores de punto con operadores de flecha para acceder a los miembros de la estructura. Finalmente, liberamos la memoria asignada para los punteros utilizando la función free() para evitar fugas de memoria.</string.h></stdio.h>

Comments are closed.