如何修改Nodo C?
我有这个函数,我有一个while循环的问题如何修改Nodo C?,c,algorithm,list,nodes,C,Algorithm,List,Nodes,我有这个函数,我有一个while循环的问题 _nodoMaterias *modificarMateria(char materia[], _nodoMaterias *apuntador) { printf("\nENTRO"); if (!listaVacia(apuntador)) { printf("\nENTRO1"); _nodoMaterias *apuntadorAuxiliar; apuntadorAux
_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的条件更改为
=
,因为当两个字符串匹配时,它返回零。如果,则检查应放在内部,而不是外部,同时
:
while (apuntadorAuxiliar != NULL) {
if (strcmp(apuntadorAuxiliar->nombre, materia) == 0) {
// modifying the node
}
}
因此,如果用户输入名称与节点名称匹配,则需要修改节点,在这种情况下,需要将strcmp
的条件更改为==
,因为当两个字符串匹配时,它返回零。如果
,则检查应放在内部,而不是外部,同时
:
while (apuntadorAuxiliar != NULL) {
if (strcmp(apuntadorAuxiliar->nombre, materia) == 0) {
// modifying the node
}
}
很难说清楚,但进入while循环的唯一方法是apuntador->material是否包含一个值,以及它是否与material不同。那你怎么知道他们持有什么?更改printf(“\nTRO1”)代码>至printf(“\nTRO1:%s,%s”,apuntador?apuntador->名称:“空”,物料)代码>并告诉我们打印的内容。它打印“ENTRO1:CALCULO,CALCULO”好的,就像我说的,如果字符串不同,它只进入while循环。它们没有区别,因此不会进入while循环。如果你能描述一下你想让它做什么,也许我们可以找出如何让它做。我想修改我列表中的节点,例如我的列表中有两个节点,一个是微积分,另一个是物理,然后我问用户你想修改哪个节点?当用户写入要修改的节点时,我的代码必须能够修改该节点。很难说清楚,但进入while循环的唯一方法是apuntador->material是否包含值,以及它是否与material不同。那你怎么知道他们持有什么?更改printf(“\nTRO1”)代码>至printf(“\nTRO1:%s,%s”,apuntador?apuntador->名称:“空”,物料)代码>并告诉我们打印的内容。它打印“ENTRO1:CALCULO,CALCULO”好的,就像我说的,如果字符串不同,它只进入while循环。它们没有区别,因此不会进入while循环。如果你能描述一下你想让它做什么,也许我们可以找出如何让它做。我想修改我列表中的节点,例如我的列表中有两个节点,一个是微积分,另一个是物理,然后我问用户你想修改哪个节点?当用户写入要修改的节点时,“我的代码”必须能够修改此节点。