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:
");
printf("num1: %" PRId32 "
", num1);
printf("num2: %" PRId64 "
", 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 "
", 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 "
", large_number);
return 0;
}
输出
上述代码产生以下结果 -
The entered number: 9876543210

