elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al imprimir cadena de carácteres en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error al imprimir cadena de carácteres en C  (Leído 14,545 veces)
darg94

Desconectado Desconectado

Mensajes: 21


00110100 00110010


Ver Perfil
Error al imprimir cadena de carácteres en C
« en: 21 Octubre 2012, 13:46 pm »

He hecho un programa de prueba para testear la impresión de cadenas de carácteres, pero me da el siguiente error:


Aquí es dejo el código para que me puedan ayudar:
Código:
//prueba de variables tipo char con cadena de carácteres

#include <stdio.h>

main ()
{

char nombre [100];
char lugar [100];

char a = 164;
char b = 162;
char c = 130;

printf ("C%cmo te llamas\?", b);
scanf ("%100[^\n]", nombre);
printf ("Hola %s, por favor, introduce lo siguiente:\n", nombre);
printf ("D%cnde vives\?", b);
scanf ("%100[^\n]", lugar);
printf ("Ahora sé que te llamas %s y vives en %s.\nEsto fue una prueba de C.\n", c, nombre, lugar, a);

getche();
return 0;
}

El fallo está en el segundo scanf, pero no lo entiendo, porque está exactamente igual que el primero.


« Última modificación: 21 Octubre 2012, 13:58 pm por darg94 » En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error al imprimir cadena de carácteres en C
« Respuesta #1 en: 21 Octubre 2012, 13:55 pm »

La función scanf() deja basura en el buffer del teclado. Es decir, cuando pulsas "intro" en el primer scanf(), te lee lo que has puesto, pero deja el '\n' de la tecla "intro" en el buffer. Así, el segundo scanf() obtiene directamente ese '\n' que se dejó, por lo que no podrás introducir nada.

Para solucionarlo, prueba a poner getchar(); justo después de scanf(); Lo que hace es leer un carácter (y, por tanto, el buffer del teclado quedará limpio).

Por cierto, te recomiendo usar gets() para leer cadenas de caracteres  ;)

Un saludo!


En línea

darg94

Desconectado Desconectado

Mensajes: 21


00110100 00110010


Ver Perfil
Re: Error al imprimir cadena de carácteres en C
« Respuesta #2 en: 21 Octubre 2012, 14:00 pm »

Gracias para ayudar a un novatazo ^^

Funciona perfectamente, gracias. Aver si me acostumbro a poner siempre los getchar
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: Error al imprimir cadena de carácteres en C
« Respuesta #3 en: 21 Octubre 2012, 14:17 pm »

¡Buenas!

Como consejo, para limpiar el buffer, es mejor que despues de cada scanf pongas esto:

Código
  1. while (getchar() != '\n')
  2. ;

O evitar el uso de scanf y en su lugar utilizar otras fucniones como fgets()

Saludos

EDITO: Otro consejo, la forma correcta de declarar main es asi:

Código
  1. int main(int argc, char const *argv[])

Y en el caso de que no vayas a utilizar lo que esta entra los parentesis, se suprime:

Código
  1. int main()

Y al final terminar siempre con return 0;

Saludos
« Última modificación: 21 Octubre 2012, 14:22 pm por Caster » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error al imprimir cadena de carácteres en C
« Respuesta #4 en: 21 Octubre 2012, 14:25 pm »

He hecho un programa de prueba para testear la impresión de cadenas de carácteres, pero me da el siguiente error:
Difícil que te de ese error cuando no tienes ni declarada la variable apellido ni aparece dicho nombre en los printf, además de asignar el símbolo %S de cadenas a caracteres a,b,c.
Supongo que esto es lo que querías hacer:

Código
  1. #include <stdio.h>
  2.  
  3. main ()
  4. {
  5. char nombre [100];
  6. char apellido [100];
  7. char lugar [100];
  8. printf ("Como te llamas\?");
  9. scanf ("%s", nombre);
  10. printf ("Hola %s, por favor, introduce lo siguiente: apellido\n",nombre );
  11. scanf ("%s", apellido);
  12. printf ("\nDonde vives\n");
  13. scanf ("%s", lugar);
  14. printf ("\nAhora se que te llamas %s %s y vives en %s.\nEsto fue una prueba de C.\n",  nombre, apellido, lugar);
  15. getchar();
  16. return 0;
  17. }
PD:no hay que limpiar buffer porque todos los printf llevan \n.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error al imprimir cadena de carácteres en C
« Respuesta #5 en: 21 Octubre 2012, 14:31 pm »

Leosansan, no tiene declarada la variable apellido porque en su ejemplo, su nombre completo es "Nombre Apellido" (es una sola cadena, ergo no hacen falta dos variables).

Porque el printf lleve '\n' nadie ha dicho que haya que limpiar el buffer, sino porque el scanf() deja un '\n' al pulsar 'intro' (usando "%100[^\n]", %d, %f, etc.; pero usando %s, como bien sale en tu ejemplo, no).

Edito: Otra cosa. "%100[^\n]" permite escribir espacios en una cadena, %s no.
« Última modificación: 21 Octubre 2012, 14:34 pm por DickGumshoe » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error al imprimir cadena de carácteres en C
« Respuesta #6 en: 21 Octubre 2012, 14:36 pm »

Leosansan, no tiene declarada la variable apellido porque en su ejemplo, su nombre completo es "Nombre Apellido" (es una sola cadena, ergo no hacen falta dos variables).
Fíjate en y ya me diras de dónde sale eso del código que expuso.
En línea

DickGumshoe


Desconectado Desconectado

Mensajes: 480



Ver Perfil WWW
Re: Error al imprimir cadena de carácteres en C
« Respuesta #7 en: 21 Octubre 2012, 14:41 pm »

Vayamos paso por paso:
Citar
-->¿Cómo te llamas? Nombre Apellido --> Variable nombre contiene "Nombre Apellido"
Hola Nombre Apellido, por favor, introduce lo siguiente: (¿Hasta aquí todo bien?)
Dónde vives? Ahora sé que.... -->Al pone su nombre scanf dejó buffer en el teclado, y no ha podido introducir su lugar de residencia. Como la variable no está inicializada, el ordenador coge lo que tenga en ese momento, que en este caso ha sido "¿>"

Esto fue una prueba en C.

En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error al imprimir cadena de carácteres en C
« Respuesta #8 en: 21 Octubre 2012, 14:54 pm »

Vayamos paso por paso:
Una imagen vale más que mil palabras:
Código
  1. #include <stdio.h>
  2.  
  3. main ()
  4. {
  5. char nombre_apellido [100];
  6. char lugar [100];
  7. printf ("Como te llamas\?");
  8. scanf ("%100[^\n]", nombre_apellido);
  9. printf ("Hola %s, por favor, introduce lo siguiente:\n", nombre_apellido);
  10. printf ("Donde vives\n?");
  11. fflush (stdin);
  12. scanf ("%100[^\n]", lugar);
  13. printf ("Ahora sé que te llamas %s y vives en %s.\nEsto fue una prueba de C.\n", nombre_apellido, lugar);
  14. return 0;
  15. }
  16.  
Ahora ya introduce nombre y apellidos y lugar con los espacios que quiera y sin que se salte ninguna sentencia.
...Si, ya sé que fflush no es muy querida, pero hace su labor; otra opción es la apuntada por Caster.
« Última modificación: 21 Octubre 2012, 14:59 pm por leosansan » En línea

darg94

Desconectado Desconectado

Mensajes: 21


00110100 00110010


Ver Perfil
Re: Error al imprimir cadena de carácteres en C
« Respuesta #9 en: 21 Octubre 2012, 15:00 pm »

Porqué es mejor declarar main así?
Código:
int main()
y porqué sugieres tambien declararlo así?
Código:
int main(int argc, char const *argv[])

Gracias
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Obtener caracteres de una Cadena VB.NET
.NET (C#, VB.NET, ASP)
NetStorm 7 17,843 Último mensaje 29 Diciembre 2009, 02:06 am
por NetStorm
cadena de caracteres
Programación C/C++
Ander123 1 2,557 Último mensaje 6 Septiembre 2012, 14:15 pm
por avesudra
[SOLUCIONADO]Recursividad: Simulacion de ciclos (Imprimir una cadena alreves)
Programación C/C++
darking664 5 3,607 Último mensaje 17 Septiembre 2013, 02:25 am
por rir3760
Error al imprimir caracteres
Programación C/C++
JoseCheO 3 2,522 Último mensaje 5 Febrero 2014, 04:46 am
por Yoel Alejandro
Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Programación C/C++
MellaSystems 8 6,766 Último mensaje 2 Marzo 2015, 03:41 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines