Re: [問題] 字元轉數字函數

作者: RishYang (Rish)   2019-05-14 12:44:00
原Po提供的程式碼
int sti(char word){
int value=(int)word;
if(value>=97){
value-=51;
} else{
value-=65;
} return value;
};
void main(void){
char a;
scanf("%c", &a);
printf("%c=%d", a, sti(a));
return 0;
}
依據原Po描述可知他使用Xcode
可是他所提供的原碼不太可能成功在Xcode上編譯
除非換編譯器,或是用之前的版本(5版在9/2016釋出)
Xcode 5.0.0之開始預設的編譯器是Clang
Clang對於void main(void)最後又return 0;
應該會產生編譯錯誤(在MSYS2 Clang 8.0.0上測試的結果)
所以我去問了水晶球,他顯示:
https://ideone.com/wOiPyb#
fgets如果可以讀完一行得到字串的結尾是"\n\0"
如果用strlen取字串"A\n\0"長度會是2
stlen只認'\0',從開頭到'\0'有2個字元
導致會意外的讀到'\n'輸出-55
補充:
int a = 'A';
是正確的做法
實際上'A'就是整數
sizeof('A');//回傳4

char c = 'A';
sizeof(c);//回傳1
char就是整數型別,只是範圍比較小的那種
所以真的不用特別寫轉型
另外<ctype.h>中有些好用的函數
islower, isupper, toupper, tolower
善用文件https://en.cppreference.com/w/c/string/byte
最後可以看看Stackoverflow關於問問題的方法
https://stackoverflow.com/help
關於XY問題
https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

Links booklink

Contact Us: admin [ a t ] ucptt.com