我怎样才能修改Nodo C?

时间:2016-11-28 00:12:06

标签: c algorithm list nodes

我有这个功能,我的while循环有问题

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

当我编译它时它变得完美但是当我使用它时,永远不要进入while循环,但我不知道为什么。

但它打印" ENTRO"和" ENTRO1"。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

因此,如果用户输入名称与节点名称匹配,则需要修改节点,在这种情况下,您需要将strcmp的条件更改为==,因为它返回当两个字符串匹配时为零。此外,检查应放在内部if,而不是外部while

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