|Lo que no hay que hacer en C/C++. Nivel basico|

Iniciado por Littlehorse, 12 Diciembre 2009, 18:15 PM

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

Horricreu

#30
Puedes comentar siempre que quieras en las chinchetas :D

rbarragan

Muy bien explicado, de echo en mi Universidad enseñan varios "malos habitos" para programar. Aunque soy de nivel básico. Pero pues ya con eso nos damos una idea.
Saludos.

Uxio

En mi facultad había tenido muchos problemas con srtcat y strcopy cuando estaba aprendiendo, y no sabía por qué fallaba...

Para mirar todo este tipo de fallos y sobreescrituras en memoria usaba Valgrind, que te informa de todas las cafradas que haces y en qué líneas (si has compilado el programa con la información de depuración)

flacc

Pero si un profesor de universidad enseña eso dando por saldado como bien hecho quiere decir que ese profe no debe enseñar hasta actualizarse, amenos que lo haga con tu mismo proposito, el de decir que no se debe hacer... es interesante, caundo me pase la primera vez por este foro era mas ignorante en informatica....saludoss

veco


[Zero]

Bueno, ahora que yo también estoy en la Universidad, y que tengo que programar aplicaciones por consola me entró la duda sobre fflush(stdin). Tengo claro que no es correcto usarla, pero no tengo clara la alternativa. Algunos mencionais que en vez de utilizar scanf(), que deja basura en el buffer, se puede utilizar fgets() "que no lo hace", pero sí lo hace, si metes más caracteres que los pasados en el segundo parámetro de fgets siguen quedando cosas en el buffer.

He leído cosas como hacer esto:

int Opt=0;
scanf("%d",&Opt);
while(getchar()!='\n');


¿Puede presentarse algún problema la hacerlo así? ¿Otras opciones?

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

Akai

#36
[Zero]
Si sabes que tu lectura va a ser siempre un entero y un salto de linea, creo que esto debería dar la talla.
scanf("%d\n"&entero);

En principio debería funcionar, si no me equivoco en algo.

Para lectura de dos enteros, (entero espacio entero salto de linea)

scanf("%d %d\n"&entero)

Esto es debido a que scanf se utiliza para "scan with format".

Como comentario curioso, en una práctica teníamos que leer algo de este estilo de un fichero:

r tabulador X tabulador (45,64) espacio (78,95) salto de linea

infernal, no?
\t es el tabulador
fscanf(fichero, "%c\t%c\t(%d,%d) (%d,%d)\n",&char1,&char2,&int1,&int2,&int3,&int4)

y problema solucionado xD

[Zero]

#37
scanf("%d\n"&entero);

Vamos a diferenciar entre lo que debería ser y lo que puede ser xD. Yo quiero leer un entero, claro está, pero el usuario puede introducir cualquier cosa, si le digo que ponga un entero, y pone "123 abc" dejaría basura en el buffer, y es lo que quiero evitar, no dejar basura en el buffer aunque el usuario no haga caso.

Saludos

Edito: Vale, no ví el '\n' xD.

Edito2: Bueno, da igual, si el usuario introduce una cadena, la cadena quedaría en el buffer.

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

[Zero]

Cita de: Leo Gutiérrez. en 27 Marzo 2011, 20:30 PM
fgets + sscanf

Pero es lo que dije antes, fgets deja basura en el buffer si el usuario escribe un número de caracteres mayor que el del segundo parámetro. Le puedo poner 1000 en el segundo parámetro, pero si el usuario mete 1001 caracteres fgets deja 1 en el buffer  :P.

Saludos

"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche