我正在自學 C 并且正在試驗型別轉換。我試圖將 a 型別轉換float為 a 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 $
這個角色從未被列印出來,我不知道出了什么問題。請幫忙。
uj5u.com熱心網友回復:
對我來說一切都很好!
為了更好地了解發生了什么,將其列印為 a%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;
}
輸出:
I am printing a typecasted character, " ", or signed decimal number "9".
在 ASCII 表中查找十進制數 9,我看到它是“HT”、\t“水平制表符”或“水平制表符”。所以,這就是你列印的。它作業得很好。
@Some 程式員老兄有一個很棒的評論也值得指出:
挑剔一點:您不會將浮點值投射到
char任何地方。在(int)a*c您將float變數強制a轉換為int. 乘法是整數乘法。整數結果存盤在整數變數中d。并且您將這個整數變數轉換為 achar,但int無論如何它都會被提升為 an 。
uj5u.com熱心網友回復:
為其他變數添加一些額外的除錯顯示了為什么會出現這種情況:
#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://www.uj5u.com/yidong/380467.html
