2016-11-28 57 views
1

我有這個功能,我有一個while循環如何修改Nodo C?

_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

這很難說清楚,但到while循環的唯一方法是,如果apuntador->材料包含的值,如果是不同的時珍。那麼你怎麼知道他們持有什麼?將printf(「\ nENTRO1」);'改爲'printf(「\ nENTRO1:%s,%s」,apuntador?apuntador-> nombre:「null」,materia);'告訴我們打印什麼。 –

+0

它打印出「ENTRO1:CALCULO,CALCULO」 – ilfredo

+0

好吧,就像我說的,如果字符串不同,它只會進入while循環。它們並沒有不同,所以它不會進入while循環。如果你能描述你想做的事情,也許我們可以想出如何讓它做到這一點。 –

回答

0

因此,如果用戶輸入名稱與節點名稱相匹配,則需要修改節點,在這種情況下,需要將條件strcmp更改爲==,因爲當兩個字符串匹配時它會返回零。另外,檢查應放在內部if,而不是外while

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