Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ZedGe en 26 Diciembre 2011, 04:55 am



Título: Pregunta sobre leer nombre por pantalla en C
Publicado por: ZedGe en 26 Diciembre 2011, 04:55 am
Tengo una estructura tipo agenda, y necesito que al preguntar por un nombre se pueda ingresar Juanito Perez y al imprimirlo nuevamente salga Juanito Perez


tengo la declaracion

Código:
char Nombre[15]

Lo pregunto y lo guardo como

Código:
scanf("%s",&nuevo->Nombres);fflush(stdin);


y al imprimir solo me sale Juanito trabajo con listas enlazadas por eso el -> y la estructura




Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: Ferno en 26 Diciembre 2011, 06:38 am
¿Podrías postear la declaración de toda la estructura y la parte del código donde lees el nombre?
A simple vista, declarase el campo nombre, y estás guardando en un campo nombres, los cuales son diferentes (por la "s" del final, pero supongo que es sólo un error de tipeo.
Otra cosa, fflush es una función para archivos de salida, no es recomendable usar fflush(stdin).


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: BlackZeroX en 26 Diciembre 2011, 06:47 am
independientemente de como tengas la lista...

Código
  1.  
  2.    char szReaderBuffer[255];
  3.  
  4.    memset(szReaderBuffer, 0, 255);         //  No es necesario pero yo siempre lo hago...
  5.    fgets(szReaderBuffer, 255, stdin);      //  Escaneamos la entrada de datos NO IMPORTA SI HAY ESPACIOS... solo importa la longitud!¡.
  6.    fprintf(stdout, "%s\n", szReaderBuffer);//  Imprimimos.
  7. //    fflush(stdout);                         //  Forzamos la salida de datos... Solo si hay errores...
  8.  
  9.    return EXIT_SUCCESS;
  10.  
  11.  

Si no te sirve el codigo anterior entonces hay algo mal declarado en tu codigo...

Nota: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Dulces Lunas!¡.


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: Caster en 26 Diciembre 2011, 08:02 am
Utiliza fgets();
Saludos


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: ZedGe en 26 Diciembre 2011, 13:19 pm
Utiliza fgets();
Saludos

el fgets usa un fichero char *fgets(char *cadena, int n, FILE *stream);

con el codigo de demon no puedo guardar la variable en mi lista enlazada aqui mi estructura del codigo

Código:
#ifndef ESTRUCTURAS_H_INCLUDED
#define ESTRUCTURAS_H_INCLUDED

typedef struct datosClientes{
   char RUT[15];
   char Nombres[15];
   char Apellidos[15];
} Datos;

typedef struct Nodo {
   Datos Persona;
   struct Nodo *sgte;
} Nodo;

typedef struct Lista {
   Nodo *inicial;
} Lista;

typedef int posicion;

#endif // ESTRUCTURAS_H_INCLUDED


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: Eternal Idol en 26 Diciembre 2011, 13:32 pm
ZedGe: tambien podes usar stdin con fgets, lee el ejemplo que te dejaron antes.


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: ZedGe en 26 Diciembre 2011, 13:36 pm
ZedGe: tambien podes usar stdin con fgets, lee el ejemplo que te dejaron antes.

Lo uso, pero al querer poner ese szReaderBuffer[255] = nuevo->Persona.Nombre me dice que no puedo guardar un char[xx] a un char*


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: Eternal Idol en 26 Diciembre 2011, 13:44 pm
LEE de nuevo y presta atencion, no intentes asignar cadenas.


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: BlackZeroX en 26 Diciembre 2011, 15:18 pm
ammm...

Código
  1.  
  2. #define SIZE_RUT 15
  3. #define SIZE_NAME 15
  4. #define SIZE_SURNAME 15
  5.  
  6. //typedef struct DataClient_ DATACLIENT, *LPDATACLIENT;
  7. //typedef struct Node NODE, *LPNODE;
  8.  
  9. typedef
  10. struct DataClient_
  11. {
  12.    char szRut[SIZE_RUT];
  13.    char szName[SIZE_NAME];
  14.    char szSurName[SIZE_SURNAME];
  15. }
  16. DATACLIENT, *LPDATACLIENT;
  17.  
  18. typedef
  19. struct Node_
  20. {
  21.   DATACLIENT dataClient;
  22.   Node_* lpNext;
  23. }
  24. NODE, *LPNODE;;
  25.  
  26. /*
  27. ///No le veo utilidad a esta estructura...
  28. typedef
  29. struct LIST
  30. {
  31.     Nodo *lpBEGIN;
  32. }
  33. LIST, *LPLIST;
  34. */
  35.  
  36. void unloadNodes(LPNODE lpNode)
  37. {
  38.    if (!lpNode)
  39.        return;
  40.    unloadNodes(lpNode->lpNext);
  41.    fprintf(stdout, "%s\n", lpNode->dataClient.szName); //  Antes de descargas mostramos...
  42.    free(lpNode);
  43. }
  44.  
  45. int main()
  46. {
  47.    LPNODE lpNodeFirst = (LPNODE)malloc(sizeof(NODE));
  48.    LPNODE lpNodeNow = lpNodeFirst;
  49.    int i = 0;
  50.  
  51.    for (i = 0; i < 10; ++i)
  52.    {
  53.        memset(lpNodeNow->dataClient.szName, 0, (SIZE_NAME - 1));
  54.        fgets(lpNodeNow->dataClient.szName, (SIZE_NAME - 1), stdin);
  55.        lpNodeNow->lpNext = (i < 9) ? (LPNODE)malloc(sizeof(NODE)): NULL;
  56.        lpNodeNow = lpNodeNow->lpNext;
  57.    }
  58.    /// Descargar TODOS los Nodos empesando desde el ultimo.
  59.    unloadNodes(lpNodeFirst);
  60.  
  61.    return EXIT_SUCCESS;
  62. }
  63.  
  64.  

Dulces Lunas!.


Título: Re: Pregunta sobre leer nombre por pantalla en C
Publicado por: ZedGe en 26 Diciembre 2011, 17:35 pm
okas gracias con el código queda mas claro