C 库 - <inttypes.h>



C 库头文件 <inttypes.h> 提供了用于格式化和处理数值数据类型(int)的各种宏。当我们使用 printf() 和 scanf() 函数时,这些宏非常有用。

库宏

在这里,我们将探索一些 inttypes.h 中重要的关键宏 -

输出格式说明符宏 - printf() 函数

  • PRIxMAX:这是 intmax_t 的 printf 说明符,等效于 %x(十六进制)。
  • PRIiMAX:这是 intmax_t 的 printf 说明符,等效于 %i(整数)。
  • PRIuLEAST32:这是 uint_least32_t 的 printf 说明符,等效于 %u(无符号)。

输入格式说明符宏 - scanf() 函数

类似于 printf() 函数,这里有一些用于读取输入的宏 -

  • SCNxMAX:这是 intmax_t 的 scanf 说明符,等效于 %x(十六进制)。
  • SCNiMAX:这是 intmax_t 的 scanf 说明符,等效于 %i(整数)。
  • SCNuLEAST32:这是 uint_least32_t 的 scanf 说明符,等效于 %u(无符号)。

字符串函数宏

以下是支持字符串函数的一些宏列表 -

  • strtoimax(str, endptr, base):它等效于 intmax_t 的 strtol()。
  • strtoumax(str, endptr, base):它等效于 uintmax_t 的 strtoul()。
  • wcstoimax(wcs, endptr, base):它等效于 intmax_t 的 wcstol()。
  • wcstoumax(wcs, endptr, base):它等效于 uintmax_t 的 wcstoul()。

示例 1

以下是 C 库头文件 <inttypes.h>,它提供了一个用于打印具有固定宽度的整数值的程序。

#include <stdio.h>
#include <inttypes.h>

int main() {
   int32_t num1 = 67543;
   int64_t num2 = 894432590;
   
   printf("Formatted output using inttypes.h:\n");
   printf("num1: %" PRId32 "\n", num1);
   printf("num2: %" PRId64 "\n", num2);
   
   return 0;
}

输出

执行上述代码后,我们将得到以下结果 -

Formatted output using inttypes.h:
num1: 67543
num2: 894432590

示例 2

下面的程序使用 inttypes.h 下的 unintmax_t 计算一个数字的阶乘。

#include <stdio.h>
#include <inttypes.h>

uintmax_t factorial(uintmax_t n) {
   if (n == 0)
       return 1;
   else
       return n * factorial(n - 1);
}

int main() {
    uintmax_t num = 5;
    printf("Factorial of %" PRIuMAX " = %" PRIuMAX "\n", num, factorial(num));
    return 0;
}

输出

执行代码后,我们将得到以下结果 -

Factorial of 5 = 120

示例 3

下面的程序使用 SCNu64 从用户读取一个 64 位无符号整数。然后使用 PRIu64 打印输入的值。

#include <stdio.h>
#include <inttypes.h>

int main() {
   uint64_t large_number = 9876543210; 
   printf("The entered number: %" PRIu64 "\n", large_number);
   return 0;
}

输出

上述代码产生以下结果 -

The entered number: 9876543210
广告