Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: difel en 5 Mayo 2010, 20:46 pm



Título: duda2
Publicado por: difel en 5 Mayo 2010, 20:46 pm
printf es para lenguaje c cout en c++ pero hacen lo mismo?
sacnf es para c pero es lo misno que el cin de c++?


Título: Re: duda2
Publicado por: Akai en 5 Mayo 2010, 21:05 pm
grosso modo, si, son las "equivalencias". tienen diferente sintaxis pero el uso viene a ser el mismo.

printf --> cout
scanf --> cin

Que alguien que lo sepa a ciencia cierta me corrija si no es así, pero creo que cin es más "limpia" que scanf.


Título: Re: duda2
Publicado por: difel en 5 Mayo 2010, 21:09 pm
gracias amigo es que nosotrso solamente programamos en c++


Título: Re: duda2
Publicado por: ^Winder^ en 5 Mayo 2010, 22:35 pm
Sí, cin es mas limpia que scanf, porque este último no limpia el buffer.


Título: Re: duda2
Publicado por: Littlehorse en 5 Mayo 2010, 22:55 pm
Sí, cin es mas limpia que scanf, porque este último no limpia el buffer.

cin no limpia el buffer tampoco. La diferencia es que si por ejemplo, lees un numero, si luego vuelves a leer otro numero se lee el salto de linea pero se descarta, pero si por ejemplo lees una cadena o un carácter sucede lo mismo que con scanf. Es decir, el salto de linea permanece en buffer en ambos casos.

Igualmente no se pueden comparar, son dos lenguajes distintos, uno es un objeto y el otro es una función. No son comparables salvo a grandes rasgos por lo que no tiene caso ahondar en las diferencias.

Saludos


Título: Re: duda2
Publicado por: ^Winder^ en 5 Mayo 2010, 22:57 pm
¿Enserio?  :o pensaba que cin sí lo hacía...  :-[ entonces, ¿en C++ también es mejor usar fgets en vez de cin?


Título: Re: duda2
Publicado por: Littlehorse en 5 Mayo 2010, 23:12 pm
fgets se utiliza en C por la posibilidad de pasar la cantidad a leer como argumento. fgets deja el salto de linea en la cadena porque lo considera un carácter valido, pero si el contenido alcanza el final de la cadena el salto de linea también queda en buffer.

Hay otras variantes en C++, por ejemplo, cin.getline (http://www.cplusplus.com/reference/iostream/istream/getline/), que descarta el salto de linea (también tienes getline (http://www.cplusplus.com/reference/string/getline/) para strings)

Saludos


Título: Re: duda2
Publicado por: ^Winder^ en 5 Mayo 2010, 23:14 pm
Gracias por la aclaración :) sí, conocía cin.getline y getline, lo que no sabía era que cin no limpiaba el buffer... enfin, siempre se aprende algo nuevo.

 :D