[Solucionado] Forma para pausar un programa

Iniciado por Caster, 27 Septiembre 2012, 17:45 PM

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

Caster

Lo acabo de compilar y funciona perfectamente, duda resuelta. Muchísimas gracias.

Saludos.

rir3760

Dos comentarios en relaciona los programas de leosansan:

1) Se debe evitar el uso de la función "gets", el porque se explica en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

2) Es un error utilizar la función "scanf" en esta forma:
scanf("%s%c", cadena);
Ya que la cadena de formato "%s%c" indica que el carácter sera almacenado en la dirección en memoria indicada por el tercer argumento, el problema es que este no existe. En su lugar se debe pasar una dirección de memoria valida o bien utilizar "%*c" para indicar que el carácter sera descartado.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

-r3-

Creo que el tema ya ha sido solucionado, pero tengo una pregunta, quizás yo esté mal, recién empiezo con C.

En la parte del for(i = 0; cadena != '\0'; ++i);
Por qué pones el punto y coma al final? Según mi libro al final del -for- no debería ir eso.

#include <stdio.h>

main()
{
int i;
char cadena[80];

scanf("%s", cadena);

for(i = 0; cadena[i] != '\0'; ++i)
printf("Cadena contiene %d caracteres\n", i);

getch();

return 0;
}


Yo lo hice así, lo compilé con gcc para windows y funciona, al final del programa se pausa, aplasto una tecla y finaliza...

xiruko

CitarCreo que no te has fijado bien en el punto y coma ";" después del while. Este es el que "obliga" al programa a esperar el ENTER para cerrar.

:huh:

el ";" no es para nada mas que para acabar el bloque del while sin ninguna sentencia dentro de el.

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

esto se hace para limpiar el bufer de entrada stdin. se ha comentado muchas veces en el foro pero lo repetire una vez mas. funciones como scanf() dejan basura en el bufer de entrada. si lo usas para leer un entero, e introduces por ejemplo "23ab", scanf() leera el "23" y el "ab\n" se quedara en el bufer de entrada. usando esta sentencia del while, limpias el bufer ya que descarta los caracteres hasta encontrarse el de salto de linea, el cual tambien lo descarta. asi luego puedes usar otras funciones como fgets() sin problemas.

CitarEn la parte del for(i = 0; cadena != '\0'; ++i);
Por qué pones el punto y coma al final? Según mi libro al final del -for- no debería ir eso.

es el mismo caso que antes. cuando el for tiene sentencias dentro de el se usan "{}", en cambio si no tiene ninguna sentencia dentro tienes que indicar de alguna manera que el for se acaba, y se hace con ";". de hecho, tambien podrias hacerlo asi:

for(i=0; cadena!='\0'; i++){}

o incluso asi:

for(i=0; cadena!='\0'; i++){};

y todas funcionarian.

un saludo!

Caster

#14
Añado algo:

Es recomendable usar esto:

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


Despues de cada scanf para limpiar siempre el bufer.

Aunque para evitart tener que cargar mucho el codigo de esto, es mejor aprender a utilizar otras funciones como por ejemplo: fgets().

Saludos