我有这个函数,但是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”。
我该如何解决这个问题?
最佳答案
如果用户输入的名称与节点的名称匹配,那么你想修改节点,在这种情况下,你需要将strcmp
的条件更改为==
,因为当两个字符串匹配时它返回零。此外,检查应放在内部 if
中,而不是外部 while
:
while (apuntadorAuxiliar != NULL) {
if (strcmp(apuntadorAuxiliar->nombre, materia) == 0) {
// modifying the node
}
}
关于c - 我如何修改 Nodo C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835439/