我正在自学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 $这个角色从来没有印出来,我也不知道出了什么问题。请帮帮忙。
发布于 2021-12-14 06:58:52
在我看来一切都很好!
为了更好地了解发生了什么,除了%i之外,还可以将其作为%c打印出来,这样您就可以看到十进制数的值是什么。
(给我跑跑)
#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;
}输出:
我正在打印一个打过字的字符“",或有符号的十进制数"9”。
查找ASCII表中的十进制数9,我看到它是"HT",\t,或“水平标签”。那就是你印的。效果很好。
@一些程序员有一个很好的评论也值得指出:
稍微吹毛求疵一点:您不会将浮点值转换到任何地方的
char。在(int)a*c中,您将float变量a转换为int。乘法是整数乘法。整数结果存储在整数变量d中。然后将这个整数变量转换为一个char,但无论如何,它都将被提升为int。
发布于 2021-12-14 06:56:49
为其他变量添加一些额外的调试可以说明为什么是这样的:
#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'或其他方面开始。
还要注意:这些类型中的很多都是较小的类型,因此有很好的机会解决问题。
https://stackoverflow.com/questions/70344733
复制相似问题