我有这个功能,我的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"。
我该如何解决这个问题?
答案 0 :(得分:0)
因此,如果用户输入名称与节点名称匹配,则需要修改节点,在这种情况下,您需要将strcmp
的条件更改为==
,因为它返回当两个字符串匹配时为零。此外,检查应放在内部if
,而不是外部while
:
while (apuntadorAuxiliar != NULL) {
if (strcmp(apuntadorAuxiliar->nombre, materia) == 0) {
// modifying the node
}
}