ilfredo ilfredo - 13 days ago 8
C Question

How can I modificated a Nodo C?

I have this function and I have a problem with the while loop

_nodoMaterias *modificarMateria(char materia[], _nodoMaterias *apuntador)
{
printf("\nENTRO");
if (!listaVacia(apuntador))
{
printf("\nENTRO1");
_nodoMaterias *apuntadorAuxiliar;

apuntadorAuxiliar = apuntador;

while (apuntadorAuxiliar != NULL && strcmp(apuntadorAuxiliar->nombre, materia) != 0)
{
printf("\nENTRO2");
if (apuntadorAuxiliar != NULL && strcmp(apuntadorAuxiliar->nombre, materia) != 0)
{
char nombre[30];
char profesor[30];
char tipoDeMateria[20];
char horasSemanales[10];

printf("\nINGRESE LOS NUEVOS DATOS DE LA MATERIA");
printf("NOMBRE: ");
fflush(stdin);
scanf("%s",nombre);
printf("PROFESOR: ");
fflush(stdin);
scanf("%s",profesor);
printf("TIPO DE MATERIA: ");
fflush(stdin);
scanf("%s",tipoDeMateria);
printf("HORAS SEMANALES: ");
fflush(stdin);
scanf("%s",horasSemanales);
fflush(stdin);

strcpy(apuntadorAuxiliar->nombre, nombre);
strcpy(apuntadorAuxiliar->profesor, profesor);
strcpy(apuntadorAuxiliar->tipoDeMateria, tipoDeMateria);
strcpy(apuntadorAuxiliar->horasSemanales, horasSemanales);
apuntadorAuxiliar->siguiente = NULL;
}

apuntadorAuxiliar = apuntadorAuxiliar->siguiente;
}

}

return apuntador;
}


When I compile it goes perfect but when I use it, never enter in the while loop but I don't now why it's this.

But it prints "ENTRO" and "ENTRO1".

How cand I solve this??

Answer

So you want to modify the node if the user input name matches the node's name, in that case, you need to change the condition of strcmp to ==, as it returns zero when the two string matches. Also the check should be put in the inner if, not the outer while:

while (apuntadorAuxiliar != NULL) {
    if (strcmp(apuntadorAuxiliar->nombre, materia) == 0) {
        // modifying the node
    }
}