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

[C] 2 problemas con uso de cadena de caracteres

Estas en el tema de [C] 2 problemas con uso de cadena de caracteres en el foro de C/C++ en Foros del Web. Antes que nada este es mi primer post acá. Bueno, les explico. Yo estoy haciendo una tarea en C que la estoy compilando con GCC, ...
  #1 (permalink)  
Antiguo 07/05/2011, 15:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 1
[C] 2 problemas con uso de cadena de caracteres

Antes que nada este es mi primer post acá. Bueno, les explico. Yo estoy haciendo una tarea en C que la estoy compilando con GCC, y dentro de ella lo que estoy buscando hacer es guardar en una estructura dos variables de tipo char, y una de variable int, de modo que guarde mas o menos lo siguiente:

Rut (char): 16.534.112-8
Nombre (char) : Julio López Prado
Edad (int): 15

Código:
printf("Rut de la persona\n");
gets (data_save.rut);
printf("Nombre de la persona\n");
gets (data_save.nombre);
printf("Edad de la persona\n");
scanf("%d", &data_save.edad);
Mis problemas son dos. El primero, es que yo necesito usar algo que me permita guardar un nombre con los espacios en blanco incluidos, así que me había decidido por usar gets, función por la cual el compilador me arroja un warning advirtiendo que la función es peligrosa.

Cita:
/tmp/ccyphPAi.o: In function `insert_into_table':
pruebatarea1ari.c:(.text+0x155): warning: the `gets' function is dangerous and should not be used.
El segundo pasa por la operación cuando compilo este programa, ya que se salta la parte en que yo debo introducir el rut y se va inmediatamente a la parte en que debo introducir el nombre de la persona.

¿Alguna sugerencia sobre lo que me debe estar pasando?

Saludos.
  #2 (permalink)  
Antiguo 07/05/2011, 15:49
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: [C] 2 problemas con uso de cadena de caracteres

Es mejor usar scanf o sus variantes (hay algunas para limitar el número de caracteres que puede introducir el usuario).

En cuanto a que se salta la sentencia gets estoy casi seguro que antes de esas sentencias has utilizado alguna función para leer de la entrada estándar y se han quedado caracteres en el buffer de escritura.

Pon el resto del programa y podremos ayudarte mejor.

Ah y utiliza el resaltador de sintaxis para que se vea mejor todavía el código (donde poner HighLight lo pones a C).
  #3 (permalink)  
Antiguo 07/05/2011, 16:04
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 1
Respuesta: [C] 2 problemas con uso de cadena de caracteres

Código C:
Ver original
  1. void insert_into_table()
  2. {
  3.     int menu2_on = 1;
  4.  
  5.     FILE *save_file;
  6.  
  7.     save_file = fopen ("archivo.dat", "wb");
  8.  
  9.     do {
  10.  
  11.         struct persona data_save;
  12.  
  13.         printf("Rut de la persona\n");
  14.         gets (data_save.rut);
  15.         printf("Nombre de la persona\n");
  16.         gets (data_save.nombre);
  17.         printf("Edad de la persona\n");
  18.         scanf("%d", &data_save.edad);
  19.  
  20.         fwrite (&data_save , 1 , sizeof(struct persona) , save_file);
  21.  
  22.         printf("¿Desea agregar otra tupla? (1 Si, 0 No)\n");
  23.         scanf("%d", &menu2_on);
  24.  
  25.     } while (menu2_on == 1);
  26. }

Tal como me lo pediste acá está la parte del programa donde me está tirando el problema. Es una función en la cual se escribe los datos que yo doy a una variable temporal, y luego lo que va a esa variable temporal se va directo a un archivo binario (el cual yo después tengo que leer por atributo, sea rut, nombre o edad).

Lo demás no lo pongo porque me funciona perfecto.

Saludos.
  #4 (permalink)  
Antiguo 07/05/2011, 18:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 1
Respuesta: [C] 2 problemas con uso de cadena de caracteres

Me respondo solo porque encontré la solución mirando algunos temas similares en el foro, el tema lo resolví usando:

Código:
scanf("%*c%[^\n]",variable);
Lo cual no tuve problema en implementar, me sacó el warning y el problema que comentaba.
Código C:
Ver original
  1. printf("Rut de la persona\n");
  2. scanf("%*c%[^\n]",data_save.rut);
  3. printf("Nombre de la persona\n");
  4. scanf("%*c%[^\n]",data_save.nombre);
  5. printf("Edad de la persona\n");
  6. scanf("%d", &data_save.edad);

Pero ahora tengo otra duda y se refiere a la impresión por pantalla, ya que lo que ahora estoy buscando es que lo que yo guarde se busque por un atributo, y si coincide con ese atributo se imprima por pantalla usando mas o menos este formato:

Código:
Rut              Nombre                                         Edad
--------------------------------------------------------------------
Y estoy probando con un programa aparte para poder luego insertarlo a mi programa general. Para ello estoy usando una serie de valores de rut, nombre y edad de prueba, del mismo tipo que las variable originales, para ver si la impresión me sale bien. Sé que con la edad no voy a
tener problemas, pero sí tengo confusión con los otros dos tipos que tengo que imprimir por pantalla, porque no sé de qué tipo ponerlos en el printf para que me salgan enteros los valores.

Este es el programa de prueba. Al compilar en GCC tira avisos de incompatibilidad.

Código C:
Ver original
  1. int main()
  2. {
  3.  
  4.     char rut[12]= ("11.715.624-3");
  5.     char nombre[255] = ("Veronica Varela");
  6.     int edad = 41;
  7.  
  8.     printf("Rut              Nombre                                         Edad\n");
  9.     printf("--------------------------------------------------------------------\n");
  10.     printf("%*c%[^\n]  %*c%[^\n] %d", rut, nombre, edad);
  11.  
  12. return (0);
  13. }

Saludos.
  #5 (permalink)  
Antiguo 08/05/2011, 14:09
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: [C] 2 problemas con uso de cadena de caracteres

Para imprimir cadenas de caracteres se usa %s.
%c es para imprimir un sólo caracter.

Sería así:
Código C:
Ver original
  1. int main()
  2. {
  3. *
  4. * * char rut[12]= ("11.715.624-3");
  5. * * char nombre[255] = ("Veronica Varela");
  6. * * int edad = 41;
  7. *
  8. * * printf("Ruta\tNombre\t Edad\n");
  9. * * printf("--------------------------------------------------------------------\n");
  10. * * printf("%s\t%s\t%d", rut, nombre, edad);
  11. *
  12. return (0);
  13. }

El \t indica un tabulador.
  #6 (permalink)  
Antiguo 08/05/2011, 14:58
 
Fecha de Ingreso: mayo-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 1
Respuesta: [C] 2 problemas con uso de cadena de caracteres

En lo que se refiere a cadenas estoy listo por ahora, por ahí te vi en otro foro donde puse un problema que concierne al mismo programa pero con un tópico distinto.

Muchas gracias por la ayuda =)

Saludos.

Etiquetas: caracteres, cadenas
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 22:41.