Autor
|
Tema: Error al imprimir cadena de carácteres en C (Leído 14,652 veces)
|
darg94
Desconectado
Mensajes: 21
00110100 00110010
|
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: //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
|
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
Mensajes: 21
00110100 00110010
|
Gracias para ayudar a un novatazo ^^
Funciona perfectamente, gracias. Aver si me acostumbro a poner siempre los getchar
|
|
|
En línea
|
|
|
|
Caster
|
¡Buenas! Como consejo, para limpiar el buffer, es mejor que despues de cada scanf pongas esto: ;
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: 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: 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
Mensajes: 1.314
|
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:#include <stdio.h> main () { char nombre [100]; char apellido [100]; char lugar [100]; printf ("Como te llamas\?"); scanf ("%s", nombre); printf ("Hola %s, por favor, introduce lo siguiente: apellido\n",nombre ); scanf ("%s", apellido); printf ("\nDonde vives\n"); scanf ("%s", lugar); printf ("\nAhora se que te llamas %s %s y vives en %s.\nEsto fue una prueba de C.\n", nombre, apellido, lugar); getchar(); return 0; }
PD:no hay que limpiar buffer porque todos los printf llevan \n.
|
|
|
En línea
|
|
|
|
DickGumshoe
|
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
Mensajes: 1.314
|
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
|
Vayamos paso por paso: -->¿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
Mensajes: 1.314
|
Vayamos paso por paso: Una imagen vale más que mil palabras:#include <stdio.h> main () { char nombre_apellido [100]; char lugar [100]; printf ("Como te llamas\?"); scanf ("%100[^\n]", nombre_apellido); printf ("Hola %s, por favor, introduce lo siguiente:\n", nombre_apellido); printf ("Donde vives\n?"); fflush (stdin); scanf ("%100[^\n]", lugar); printf ("Ahora sé que te llamas %s y vives en %s.\nEsto fue una prueba de C.\n", nombre_apellido, lugar); return 0; }
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
Mensajes: 21
00110100 00110010
|
Porqué es mejor declarar main así? y porqué sugieres tambien declararlo así? int main(int argc, char const *argv[])
Gracias
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Obtener caracteres de una Cadena VB.NET
.NET (C#, VB.NET, ASP)
|
NetStorm
|
7
|
17,875
|
29 Diciembre 2009, 02:06 am
por NetStorm
|
|
|
cadena de caracteres
Programación C/C++
|
Ander123
|
1
|
2,586
|
6 Septiembre 2012, 14:15 pm
por avesudra
|
|
|
[SOLUCIONADO]Recursividad: Simulacion de ciclos (Imprimir una cadena alreves)
Programación C/C++
|
darking664
|
5
|
3,639
|
17 Septiembre 2013, 02:25 am
por rir3760
|
|
|
Error al imprimir caracteres
Programación C/C++
|
JoseCheO
|
3
|
2,550
|
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,831
|
2 Marzo 2015, 03:41 am
por engel lex
|
|