原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