Nunca puedo entender cómo imprimir el unsigned long
tipo de datos en C.
Supongamos que unsigned_foo
es un unsigned long
, entonces intento:
printf("%lu\n", unsigned_foo)
printf("%du\n", unsigned_foo)
printf("%ud\n", unsigned_foo)
printf("%ll\n", unsigned_foo)
printf("%ld\n", unsigned_foo)
printf("%dl\n", unsigned_foo)
Y todos ellos imprimen algún tipo de -123123123
número en lugar de lo unsigned long
que tengo.
c
printf
long-integer
unsigned
format-specifiers
bodacydo
fuente
fuente
%lu
funcionó esta vez. Gracias. Algo más debe haber sucedido antes y no funcionó.%lu
. Técnicamente es un comportamiento indefinido, pero en realidad la variable tiene un valor impredecible que se pasa a printf, que printf interpreta como no firmado. Supongo problema original de bodacydo era agua que llegue a una llamada printf incorrectos en lugar de la intención ...%lu
, desglosado es:%
- comienza una "especificación de conversión";l
- el modificador de longitud,l
significa "[unsigned] long int";u
- el especificador de conversión,u
es paraunsigned int
que se imprima como decimal. Debido a que le dimos el modificador de longitudl
, entonces acepta ununsigned long int
. Las letras deben estar en ese orden: porcentaje, longitud, conversión. (Hay algunas opciones más, como el ancho y la precisión, que puede agregar. ¡ Vea la página del manual , ya que documenta todo esto con precisión!)%lu
por largo tiempo sin firmar%llu
para no firmado largo largofuente
Para int
%d
Por mucho tiempo
%ld
Por mucho tiempo int
%lld
Para unsigned long long int
%llu
fuente
De todas las combinaciones que probó,
%ld
y%lu
son las únicas que son especificadores de formato printf válidos.%lu
(decimal largo sin signo)%lx
o%lX
(hexadecimal largo con letras minúsculas o mayúsculas) y%lo
(octal largo) son los únicos especificadores de formato válidos para una variable de tipo sin signo largo (por supuesto, puede agregar modificadores de ancho de campo, precisión, etc.%
y ell
).fuente
printf
se especifica que requiere los tipos de argumentos correctos exactos sin las tolerancias queva_arg
tendrían.Esto te será de ayuda. . .
fuente
El formato es
%lu
.Por favor, consulte los otros tipos de datos y su uso en printf aquí
fuente
El especificador correcto para largos sin signo es
%lu
.Si no obtiene el valor exacto que espera, puede haber algunos problemas en su código.
Por favor copie su código aquí. Entonces, tal vez alguien pueda decirte mejor cuál es el problema.
fuente
Yo tuve el mismo problema. Prueba "% ul", me funciona.
fuente