将 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
或“Horizontal 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.
我正在自学 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
或“Horizontal Tab”。所以,这就是你打印的内容。效果很好。
To nitpick a little: You don't cast a floating point value to
char
anywhere. In(int)a*c
you cast thefloat
variablea
to anint
. The multiplication is an integer multiplication. The integer result is stored in the integer variabled
. And you cast this integer variable to achar
, but that will then be promoted to anint
anyway.