C int 到 char 不使用 char 格式打印

标签 c

我正在尝试使用字符格式说明符打印出整数的数字。

这就是我现在拥有的

    //counter = arbitrary int
    while (counter > 0) {
            char c = (char)(counter % 10);
            printf("%c", c);
            counter/=10;
        }

这只是打印出空白,但如果我将格式说明符更改为 int 但保留类型转换,它将打印正确的值。像这样的事情

   char c = (char)(counter % 10);
   printf("%d", c);

知道为什么当我使用字符格式说明符时不打印吗?

最佳答案

%c 用于打印字符,而不是数字。如果您想打印数字,您应该使用%d。它适用于 char 的原因是,当您将 char 作为参数传递给可变参数函数时,它会隐式提升为 int

如果c包含'A',并且您使用%c对其进行格式化,您将得到字母'A',但是如果您使用 %d,您将获得其整数值,例如65.

如果一定要使用%c,可以在打印前在字符上加上'0'的值,例如L

printf("%c", c + '0');

关于C int 到 char 不使用 char 格式打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415072/

相关文章:

c - 为什么 int 在乘法中会被提升而不是在除法中?

c - 通过 fopen 创建文件在 Linux 上运行良好但在 Windows 上运行不正常(MS VS 2010)

C - 初始化元素不是常量

C : Array of bytes which stores unsigned ints using 3 bytes

c++ - 并行将 64 位整数中的压缩 8 位整数减去 1,SWAR 无需硬件 SIMD

c - 一种在两个 10 位数字之间找到正交路径的算法

c - 如何在不调用 GetQueuedCompletionStatus() 的情况下知道 WSASend() 操作是否已完成?

c - 为什么我会收到编译器错误 : ‘SIGSUR1’ was not declared in this scope?

c - 在 C 中定义字符串的正确方法是什么?

c - LLDB会改变C程序的环境变量地址吗?