Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Valor NULL

Estas en el tema de Valor NULL en el foro de C/C++ en Foros del Web. Hola, quisiera hacerle una pregunta sobre arreglo, perdon si es muy tonta digamos que tengo la posicion 1 de un arreglo de 4, y en ...
  #1 (permalink)  
Antiguo 06/08/2011, 10:53
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Pregunta Valor NULL

Hola, quisiera hacerle una pregunta sobre arreglo, perdon si es muy tonta digamos que tengo la posicion 1 de un arreglo de 4, y en esa posicion tengo digamos el nombre "pepe", si deseo vaciar ese arreglo tengo que asignarle NULL

nombre[2]=NULL,

C++ me permite eso? o hay otra forma de dejar vacia esa posicion( que no sea metiendole un valor 0?)
  #2 (permalink)  
Antiguo 06/08/2011, 13:01
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años
Puntos: 3
Respuesta: Valor NULL

Si el arreglo "nombre" es un arreglo de apuntadores a cadenas char, entonces si, si haces eso el elemento 2 apuntaría a NULL ( que es nada ). De todas formas ponerle 0 y NULL es lo mismo (o eso creo jaja).
  #3 (permalink)  
Antiguo 06/08/2011, 13:18
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Valor NULL

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     char socios[4][25];
  10.     int opcion;
  11.     int i=0;
  12.     char *vacio={""};
  13.     int contador_socios;
  14.     int numero;
  15.     string respuesta;
  16.    
  17.    
  18.     while(respuesta!="n" && respuesta!="N")
  19.     {
  20.        cout<<"Digite#1 para agregar socio"<<endl;
  21.        cout<<"Digite#2 para modificar socio"<<endl;
  22.        cout<<"Digite#3 para eliminar socio"<<endl;
  23.        cout<<"Digite#4 para mostrar socios"<<endl;
  24.        cout<<endl;
  25.        cout<<"Que opcion desea realizar?"<<endl;
  26.        cin>>opcion;
  27.        
  28.        ifstream Archivo_I_Entrante("i.dat", ios::in);
  29.        Archivo_I_Entrante>>i;
  30.        
  31.        switch(opcion)
  32.        {
  33.                      case 1:
  34.                           {
  35.                                ofstream SocioSaliente("socios.dat", ios::app|ios::binary);
  36.                                ofstream Archivo_I_Saliente("i.dat", ios::out);
  37.                                ifstream Archivo_I_Entrante("i.dat", ios::in);
  38.                                ofstream ContadorSociosSaliente("contador_socios.dat", ios::out);
  39.                                
  40.                                Archivo_I_Entrante>>i;
  41.                                
  42.                                
  43.                                
  44.                                if(i<4)
  45.                                {
  46.                                              
  47.                                       SocioSaliente.seekp(i*sizeof(socios[1]), ios::beg);
  48.                                       cout<<"Digite el nombre del socio #"<<i<<endl;
  49.                                       cin>>socios[i];
  50.                                      
  51.                                      
  52.                                       SocioSaliente.write((char*)&socios[i], sizeof(socios[i]));
  53.                                       i++;
  54.                                       contador_socios=i;
  55.                                       }
  56.                                       else
  57.                                       {
  58.                                           cout<<"Memoria Llena"<<endl;
  59.                                           cout<<endl;
  60.                                           }
  61.                                           Archivo_I_Saliente<<i;
  62.                                      
  63.                                           ContadorSociosSaliente<<contador_socios;
  64.                                           }
  65.                           break;
  66.                          
  67.                           case 2:
  68.                                {
  69.                                           fstream SociosEntrantes("socios.dat", ios::in|ios::out|ios::binary);
  70.                                           ifstream ContadorSociosEntrante("contador_socios.dat", ios::in);
  71.                                          
  72.                                           ContadorSociosEntrante>>contador_socios;
  73.                                          
  74.                                           for(int k=0;k<contador_socios;k++)
  75.                                           {
  76.                                                   SociosEntrantes.read((char*)&socios[k], sizeof(socios[k]));
  77.                                                   }
  78.                                          
  79.                                           cout<<"Digite un numero de socio(Valido de 0 a "<<contador_socios<<")"<<endl;
  80.                                           cin>>numero;
  81.                                          
  82.                                           SociosEntrantes.seekp(numero*sizeof(socios[1]), ios::beg);
  83.                                          
  84.                                           cout<<"El nombre del socio #"<<numero<<" es de nombre: "<<socios[numero]<<endl;
  85.                                           cout<<endl;
  86.                                           cout<<"Escriba la modificacion de nombre:"<<endl;
  87.                                           cin>>socios[numero];
  88.                                           cout<<endl;
  89.                                          
  90.                                           SociosEntrantes.write((char*)&socios[numero], sizeof(socios[1]));
  91.                                          
  92.                                           cout<<"Socio Modificado!!"<<endl;
  93.                                           cout<<endl;
  94.                                           }
  95.                         break;
  96.                        
  97.                         case 3:
  98.                              {
  99.                                           fstream SociosEntrantes("socios.dat", ios::in|ios::out|ios::binary);
  100.                                           ifstream ContadorSociosEntrante("contador_socios.dat", ios::in);
  101.                                           ofstream ContadorSociosSaliente("contador_socios.dat", ios::out);
  102.                                           ofstream Archivo_I_Saliente("i.dat", ios::out);
  103.                                          
  104.                                           ContadorSociosEntrante>>contador_socios;
  105.                                          
  106.                                           for(int j=0;j<contador_socios;j++)
  107.                                           {
  108.                                                   SociosEntrantes.read((char*)&socios[j], sizeof(socios[j]));
  109.                                                   }
  110.                                          
  111.                                           cout<<"Digite un numero de socio(Valido de 0 a "<<contador_socios<<")"<<endl;
  112.                                           cin>>numero;
  113.                                          
  114.                                           SociosEntrantes.seekp(numero*sizeof(socios[1]), ios::beg);
  115.                                          
  116.                                           cout<<"El nombre del socio #"<<numero<<" es de nombre: "<<socios[numero]<<endl;
  117.                                           cout<<endl;
  118.                                          
  119.                                          for(int j=0;j<25;j++)
  120.                                          {
  121.                                                  socios[numero][j]=NULL;
  122.                                                  }
  123.                                                  
  124.                                          SociosEntrantes.seekp(numero*sizeof(socios[1]), ios::beg);
  125.                                          SociosEntrantes.write((char*)&socios[numero], sizeof(socios[1]));
  126.                                          
  127.                                           cout<<"Socio Eliminado!!"<<endl;
  128.                                           cout<<endl;
  129.                                          
  130.                                         while(numero<contador_socios)
  131.                                         {  
  132.                                           SociosEntrantes.seekp(numero*sizeof(socios[1]), ios::beg);
  133.                                           memcpy(socios[numero], socios[numero+1], 25 * (3 - numero));
  134.                                           SociosEntrantes.write((char*)&socios[numero], sizeof(socios[0]));
  135.                                           SociosEntrantes.seekp(numero+1*sizeof(socios[1]), ios::beg);
  136.                                           for(int k=0;k<25;k++)
  137.                                           {
  138.                                                   socios[numero+1][k]=NULL;
  139.                                                  
  140.                                                   }
  141.                        
  142.                                           numero++;
  143.                                           }
  144.                                          
  145.                                                  
  146.    
  147.                                           i=i-1;
  148.                                           contador_socios=contador_socios-1;
  149.                                           ContadorSociosSaliente<<contador_socios;
  150.                                           Archivo_I_Saliente<<i;
  151.                                          
  152.                      
  153.                                           }      
  154.                         break;
  155.                        
  156.                         case 4:
  157.                              {
  158.                                           ifstream SociosEntrantes("socios.dat", ios::in|ios::binary);
  159.                                           ifstream ContadorSociosEntrantes("contador_socios.dat", ios::in);
  160.                                           ifstream Archivo_I_Entrante("i.dat", ios::in);
  161.                                          
  162.                                           ContadorSociosEntrantes>>contador_socios;
  163.                                           Archivo_I_Entrante>>i;
  164.                                           for(int m=0;m<i;m++)
  165.                                           {
  166.                                                   SociosEntrantes.read((char*)&socios[m], sizeof(socios[0]));
  167.                                                   }
  168.                                          
  169.                                           for(int m=0;m<contador_socios;m++)
  170.                                           {
  171.                                                   cout<<"Nombre#"<<m<<" : "<<socios[m]<<endl;
  172.                                                   }
  173.                                                   }
  174.                                                  cout<<endl;
  175.                         break;
  176.                         }
  177.                        
  178.                         cout<<"Desea realizar otra accion s/n?"<<endl;
  179.                         cin>>respuesta;
  180.                         system("cls");
  181.                         }
  182.                        
  183.                         return 0;
  184.                         }
  #4 (permalink)  
Antiguo 06/08/2011, 13:19
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Valor NULL

utilizo el null para dejr vacia una posicion, pero y cuando queda vacia, la posicion posterior ocupa su posicion hasta que el espacio vacio llega al final, pero cuando ingreso un nuevo socio, no me lo muestra, solo muestra el espacio vacio, no se que hacer con ese case 3, en teoria me sale
  #5 (permalink)  
Antiguo 06/08/2011, 16:21
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años
Puntos: 3
Respuesta: Valor NULL

Esque NULL se utiliza para punteros, si apuntan a NULL no apuntan a nada, en ese caso le podrías decir:

Si es distinto de NULL
mostrar registro

en tu caso solo tienes la cadena de caracteres, si intentas mostrar una posicion sin nada, te mostrará espacios xd
  #6 (permalink)  
Antiguo 06/08/2011, 16:57
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Valor NULL

Cita:
Iniciado por Checho360 Ver Mensaje
Esque NULL se utiliza para punteros, si apuntan a NULL no apuntan a nada, en ese caso le podrías decir:

Si es distinto de NULL
mostrar registro

en tu caso solo tienes la cadena de caracteres, si intentas mostrar una posicion sin nada, te mostrará espacios xd
por eso mismo, pero yo ingrese en la posicion un nombre o algo, osea en mi caso metia casita, pero a la hora de mostrarla no muestra nada, PORQUE si yo meti algo a esa posicion y por defecto me tiene que mostrar lo que meti?
  #7 (permalink)  
Antiguo 06/08/2011, 17:01
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Valor NULL

cambio el valor de NULL por 0 para vaciar la posicion, pero aun asi no logro meter nada en la posicion vacia, PORQUE?
  #8 (permalink)  
Antiguo 06/08/2011, 17:53
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Valor NULL

Hacer esto:
socios[numero][j]=NULL;

Depende del uso que le das... generalmente si es una cadena de caracteres con poner en cero la primera posicion cualquier funcion declarada en string.h se va a dar cuanta que la cadena es vacia pora mas que haya cosas adelante. Pero solo es una cuestion de interpretacion. Las funcion para imprimir tambien van a coratar cuando llegan al cero. Si es en la primera poscision no imprimin nada.

Saludos
  #9 (permalink)  
Antiguo 06/08/2011, 21:40
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Valor NULL

Cita:
Iniciado por sam90 Ver Mensaje
Hacer esto:
socios[numero][j]=NULL;

Depende del uso que le das... generalmente si es una cadena de caracteres con poner en cero la primera posicion cualquier funcion declarada en string.h se va a dar cuanta que la cadena es vacia pora mas que haya cosas adelante. Pero solo es una cuestion de interpretacion. Las funcion para imprimir tambien van a coratar cuando llegan al cero. Si es en la primera poscision no imprimin nada.

Saludos
pero si le estoy dando un 0, en teoria queda vacia, y en teoria la puedo volver a llenar, digamos con otra palabra?, porque eso es lo que hago, le asigno un 0 y queda vacia, pero ingreso algo a esa posicion y aun me dice que la posicion esta vacia, eso es lo que no entiendo
  #10 (permalink)  
Antiguo 07/08/2011, 00:04
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Valor NULL

Sugiero que imprimas el indice que estas usando para insertar el nuevo valor. Por lo que se ve en el codigo cuando insertas lo haces en la posicion "i", la que se incrementa cada vez que se inserta un valor, y se decrementa cuando eliminas, pero cuando eliminas eliminas la posicion "numero" y cuando insertas lo haces a la posicion "i", y puesto que no te resulta, esos valores deben ser distintos.

printf de "numero" e "i" deberian descubrir que los indices usados son distintos.
  #11 (permalink)  
Antiguo 07/08/2011, 02:48
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años
Puntos: 3
Respuesta: Valor NULL

Inserta en el primer elemento de la cadena que no quieres que se muestre '\0' y así ya no la leerá, aunque si quieres reasignar un nombre a la cadena se
hará más dificil

Etiquetas: null
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:04.