Nunca puedo entender cómo imprimir el unsigned longtipo de datos en C.
Supongamos que unsigned_fooes 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 -123123123número en lugar de lo unsigned longque tengo.
c
printf
long-integer
unsigned
format-specifiers
bodacydo
fuente
fuente

%lufuncionó 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,lsignifica "[unsigned] long int";u- el especificador de conversión,ues paraunsigned intque 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!)%lupor largo tiempo sin firmar%llupara no firmado largo largofuente
Para int
%dPor mucho tiempo
%ldPor mucho tiempo int
%lldPara unsigned long long int
%llufuente
De todas las combinaciones que probó,
%ldy%luson las únicas que son especificadores de formato printf válidos.%lu(decimal largo sin signo)%lxo%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
printfse especifica que requiere los tipos de argumentos correctos exactos sin las tolerancias queva_argtendrí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