Error al imprimir cadena de carácteres en C

Iniciado por darg94, 21 Octubre 2012, 13:46 PM

0 Miembros y 1 Visitante están viendo este tema.

darg94

Cita de: leosansan en 21 Octubre 2012, 14:25 PM
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.

copialo, pegalo, compilalo y ejecutalo

Caster

El error esta en que cuando introduce la primera cadena, en el buffer queda un salto de linea '\n' entonces al siguiente scanf ya no deja introducir nada, para esto la solucion es limpiar el buffer. Respecto a los caracteres a,b y c los esta utilizando para que aparezcan los acentos, entonces en el segundo printf da error porque solo estan los caracteres de conversion para las cadenas nombre y lugar, pero no para los caracters, ahi da el error.

Quiero dejar claro que he copiado el codigo y lo he compilado y a la hora de introducir la seugnda cadena me da error y se me cierra

Saludos

DickGumshoe

#12
Leosansan, antes afirmabas esto:

CitarDifícil que te de ese error cuando no tienes ni declarada la variable apellido ni aparece dicho nombre en los printf

Ahora dices que lo que falla es en que tiene que poner fflush(stdin)... Y precisamente fflush(stdin), además de no ser nada correcto, en este caso la función sería la misma que getchar(), que sí es correcto (y es lo mismo que lo que dijo también Caster)... Creo que estamos dándole muchas vuelvas al tema. Con mi primera respuesta ya solucionó su duda...:

CitarGracias para ayudar a un novatazo ^^

Funciona perfectamente, gracias. Aver si me acostumbro a poner siempre los getchar

Darg94, la forma correcta en el estándar de C de la función main es

int main()
{
...
return 0;
}

Es decir, que main es de tipo int en el estándar. El return 0 es porque, como toda función de tipo int, debe devolver algo. Se usa 0 si el programa terminó correctamente, u otro número si hubo algún error.

Caster

#13
En general es asi:

int main(int argc, char const *argv[])
{
/* code */
return 0;
}


Esto es asi porque en los estandares de C la funcion main() es de tipo int, y por consiguiente al ser de tipo int siempre retornara un valor entero, por eso se escribe return 0;

Se puede utilizar fflush(stdin) para limpiar el buffer, pero es mejor evitar su uso, porque fflush es para el buffer de salida(stdout), si se usa para stdin su comportamiento no tiene porque ser el esperado y producir problemas en la ejecución del programa, la mejor forma es como ya dije mas arriba, asi:

while (getchar() != '\n')
;

Saludos

darg94

Cita de: Caster en 21 Octubre 2012, 15:09 PM

Quiero dejar claro que he copiado el codigo y lo he compilado y a la hora de introducir la seugnda cadena me da error y se me cierra

Saludos

oops
mis disculpas,
me olvidé de cambiar esto:
de:

printf ("Ahora sé que te llamas %s y vives en %s.\nEsto fue una prueba de C.\n", c, nombre, lugar, a);

a

printf ("Ahora s%c que te llamas %s y vives en %s.\nEsto fue una prueba de C.\n", c, nombre, lugar);