将 float 类型转换为 char

Typecasting a float to char

我正在自学 C 并且正在尝试类型转换。我试图将 float 类型转换为 char,这是我的代码:

# include <stdio.h>
int main() {
  float a = 3.14;
  int c = 3;
  int d;
  d = (int)a*c;
  printf("I am printing a typecasted character %c", (char)d);
  return 0;
}

我得到的输出是这样的:

$ clang-7 -pthread -lm -o main main.c
$ ./main
I am printing a typecasted character $

字符从未打印出来,我不知道哪里出了问题。请帮忙。

为其他变量添加一些额外的调试说明了为什么会这样:

#include <stdio.h>
int main() {
    float a = 3.14;
    int c = 3;
    int d;
    d = (int)a*c;
    printf("I am printing a typecasted character %c, %f, %d, %d", (char)a, a, c, d);
    return 0;
}

输出:I am printing a typecasted character , 3.140000, 3, 9

字符 9 不在可打印的 ASCII 范围内,因此没有任何有用的打印。

从你的问题中不清楚你在期待什么,但也许你的意思是格式字符串中的 %d?或者,也许您想从可打印范围 (char)a + 32(char)a+'0' 或其他内容开始。

另请注意:其中许多类型转换为较小的类型,因此很有可能出现问题。

我觉得一切都很好!

为了更好地了解发生了什么,除了 %c 之外,将其打印为 %i 这样您就可以看到十进制数值是多少。

(run me)

#include <stdio.h>

int main(){
    float a = 3.14;
    int c = 3;
    int d;
    d = (int)a*c;
    printf("I am printing a typecasted character, \"%c\", or signed decimal "
           "number \"%i\".\n", (char)d, (char)d);
    return 0;
}

输出:

I am printing a typecasted character, "   ", or signed decimal number "9".

查找 decimal number 9 in an ASCII table,我看到它是“HT”、\t 或“Horizo​​ntal Tab”。所以,这就是你打印的内容。效果很好。

也值得指出:

To nitpick a little: You don't cast a floating point value to char anywhere. In (int)a*c you cast the float variable a to an int. The multiplication is an integer multiplication. The integer result is stored in the integer variable d. And you cast this integer variable to a char, but that will then be promoted to an int anyway.