Hola, a todos;
Estoy intentando resolver el siguiente ejercicio la verdad no se si voy bien,no entiendo a lo que se refiere el punto 3, dos digitos en un espacio de 5 caracteres osea (23.)?Quisiera que me pudieran saber si me pueden ayudar. Gracias.
/*C) Escribir una instruccion prinf() que produzca el resultado mostrado.
3)Tres numero enteros de dos digitos, cada uno ocupando un espacio de 5 caracteres.
*/
#include<stdio.h>
#include<limits>
using namespace std;
int main (){
int dos,cuatro,a,b,c;
float uno,f_cuatro;
uno = 1/3;
dos = numeric_limits < int > :: max ( );
cuatro = 50;
f_cuatro = 53.123;
a = 20;
b = 30;
c = 40;
printf("\n %.3f-----%d-----%d %d %d-----%d %f",uno,dos,a,b,c,cuatro,f_cuatro);
return 0;
}
· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex
¿Qué tal vas de inglés?
Aquí el manual de la família printf (https://linux.die.net/man/3/printf)
Trae todas las respuestas a lo que pides.
Muchas gracias MAFUS, esta muy util, pero todavia no entiendo lo que quiere decir con 3 numeros de dos digitos ocupando un espacio de 5 caracteres.
Normalmente los números ocupan el espacio de sus propios dígitos, pero el ejercicio te propone que escribas tres números que, a pesar de ser de dos dígitos cada uno ocupen 5 espacios para caracteres. Esto lo tienes en el manual.
Hola, lo lei varias veces aunque no entendí mucho. Sin embargo si me ayudo con el punto
3 todavia ando varado por el punto 1 y 2, con el tema de 1/3=00.333, el resultado siempre me imprime 0.333. Intente con la anchura de "%5.3f", pero no resulto e intentado con mas como *,05.3, si me puedes dar otra pista te agradecería la verdad aprendí un poco de conceptos, que no manejaba muchas gracias.
#include<stdio.h>
#include<limits>
using namespace std;
int main (){
int dos,cuatro,a,b,c;
float uno,f_cuatro;
uno = float (1)/float(3);
dos = numeric_limits < int > :: max ( );
cuatro = 50;
f_cuatro = 53.123;
a = 20;
b = 30;
c = 40;
printf("\n %05f-----%d-----%5d %5d %5d-----%-3d %.3f",uno,dos,a,b,c,cuatro,f_cuatro);
return 0;
}
[\code]
Solo está el enunciado del tres. ¿qué dicen los otros puntos?
Mira MAFUS;
1)El resultado de 1/3 con dos enteros y 3 decimales
2)El valor maximo de una variable entera con separadores de miles.
No he conseguido que el resultado me de 00.333, ya lo intente especificando un %05.3f, osea 5 números 3 decimales, donde tenia que rellenar a la izquierda los con dos 0;00.
Y el segundo lo estoy mirando hasta ahora. tengo que hacer que el valor max del entero me imprima los puntos de millares así como 2.147.483.648 y no 2147483648 como lo tengo actualmente,
Para el 1: la coma decimal (o punto decimal) también se considera parte del número de dígitos cuando marcas el número mínimo de caracteres a usar. La cadena de control por tanto será
"%06.3f"
Por cierto, para hacer una división con decimales basta que uno de los dos números sea marcado cómo decimal con un punto decimal. Así:
float uno = 1/3.;
;
Cuando C encuentra una operación matemática con dos números de diferente naturaleza siempre promociona los de menor rango al mismo tipo del mayor rango de la operación.
Para el 2: el manual dice
CitarFor some numeric conversions a radix character ("decimal point") or thousands' grouping character is used. The actual character used depends on the LC_NUMERIC part of the locale. The POSIX locale uses '.' as radix character, and does not have a grouping character. Thus,
printf("%'.2f", 1234567.89);
results in "1234567.89" in the POSIX locale, in "1234567,89" in the nl_NL locale, and in "1.234.567,89" in the da_DK locale.
Como puedes ver te marca que el apostrofe es el signo a usar para que printf imprima el separador de millares y, además, dice que depende de la configuración local.
Otra búsqueda por internet, no muy larga, indica como cambiar el comportamiento de printf si de normal no marca los millares. Para ahorrarte el trabajo te lo pongo aquí. Antes de usar printf debes cambiar la configuración local de esta forma:
setlocale(LC_NUMERIC, "");
De nuevo mil gracias MAFUS, no se como no se me ocurrió que el punto es un carácter,bueno.
Ya estaba mirando justamente ese tema de setlocale LC_NUMERIC, pero no encuentro la abreviación de el locale de mi país intente (co_CO) y (COLOMBIA), ya que decia que lo pusiera en mayúscula.
http://www.cplusplus.com/reference/clocale/setlocale/
#include<stdio.h>
#include<limits>
#include<locale.h>
using namespace std;
int main (){
int dos,cuatro,a,b,c;
float uno,f_cuatro;
setlocale(LC_NUMERIC, "");
uno = 1.0/3;
dos = numeric_limits < int > :: max ( );
cuatro = 50;
f_cuatro = 53.123;
a = 20;
b = 30;
c = 40;
printf("\n %06.3f-----%d-----%5d %5d %5d-----%-3d %.3f",uno,dos,a,b,c,cuatro,f_cuatro);
return 0;
}
Para colombia es es_CO
http://www.localeplanet.com/icu/es-CO/
No >:D >:D >:D >:D MAFUS.
No quiere colocar los millares en el int. No si se le falte algo de mas al código.
Probandolo con otro código me tiera un valor null, no me tira la localidad de Colombia.
[Codigo]
#include <locale.h>
#include <stdio.h>
#include <time.h>
using namesapce std;
int main ()
{
time_t currtime;
struct tm *timer;
char buffer[80];
time( &currtime );
timer = localtime( &currtime );
printf("Locale is: %s\n", setlocale(LC_ALL, "es_CO"));
strftime(buffer,80,"%c", timer );
printf("Date is: %s\n", buffer);
printf("Locale is: %s\n", setlocale(LC_ALL, "es_CO"));
strftime(buffer,80,"%c", timer );
printf("Date is: %s\n", buffer);
return(0);
}
No se que pueda hacer. :-\
Partiendo de tu último programa he hecho que me escriba el valor devuelto por una cadena vacía ("") y me ha devuelto el valor "es_ES.UTF-8". Es así porque este es el locale de mi sistema. De seguro que si tienes bien configurado tu S.O. te devolverá el de Colombia. De todas formas lo he buscado y es "es_CO.UTF-8". Inténtalo, a lo mejor los sistemas ahora están basados en UTF8. O dale la cadena vacía.
Sobre lo que me has dicho de que no quieres darle separador de millares al int, no lo entiendo pues eso es lo que te pide el ejercicio.
Si MAFUS me sirvio con "" extraño no había querido.Pero aun no me dan los millares.
No, me entendiste mal, dije que no ha separado el numero int en millares todavia, por eso probe con otro programa si el lc_numeric funcionaba y siempre me de volvia un valor null.
El codigo esta igual que antes pero con un es_CO.UTF-8 dentro de las comillas.
Griacias!!! Por su atención eres Grande.
Extraño que no te dé los millares. A mi con este código
#include <locale.h>
#include <stdio.h>
int main ()
{
printf("Locale is: %s\n", setlocale(LC_ALL, "es_CO.UTF-8"));
printf("Número: %'d\n", 12345678);
}
Me da la siguiente salida:
CitarLocale is: es_CO.UTF-8
Número: 12.345.678
Mmmmmm es muy estraño compile el codigo que me das arriba y no me lee el apostrofe.
me sale en pantalla;
[Codigo]
Local is: <null>
numero: 'd
Vale, lo entiendo. Debes estar trabajando con Windows, por eso no tienes la codificación es_CO.UTF-8 ni el apostrofe como bandera para printf, ya que este es parte del estándar POSIX, que Windows no usa. Si ese es el caso tienes dos posibilidades:
Usar un compilador que trabaje con POSIX
o
Formatear la cadena a mano.
Hola MAFUS;
Tu que elección me recomiendas y si pudieras facilitarme un manual o algo confiable. Lo siento la tardanza. Gracias de antemano.