今天学习了char类型。一个字符的char类型是占8个位的,如果给的字符超过了一个并且打的是单引号,那么系统会自动储存最后一个字符。
//int main(void)
//{
// char a = 'FATE';
// char b[] = "FATE";
// printf("%c\n", a);//E
// printf("%s", b);//FATE
// return 0;
//}
就例如上面这个代码,a只打印出来了E,而b却打印出了完整的FATE。其中b是属于字符串,在声明是要在b后面加上一个[]才能说明这是一个字符串,并且字符串的声明不能像单字符或整形那样分行引入参数,必须写在一行,打印时也只写b而不写b[]。
//int main(void)
//{
// printf("\a");
// return 0;
//}
//int main(void)
//{
// printf("\007");
// return 0;
//}
接下来是转移序列,但是根据ASCII码我不是很懂为什么\007会发挥和\a一样的作用,而且ASCII里面是没有7的,a对应的应该是97,书上说\007是八进制,但007八进制对应的还是7呀,跟a有什么关系。
//int main(void)
//{
// int a;
// a = '\014';
// printf("%d", a);//12
// return 0;
//}
然后我就开始研究八进制,十六进制是不是这么表示,刚开始的时候是对的,'\014'对应的事12。
//int main(void)
//{
// char a, b;
// a = 65;
// b = '\65';//5,看不懂
// printf("%c,%c", a, b);
// return 0;
//}
//int main(void)//完全看不懂
//{
// printf("\x65");//e
// printf("\065");//5
// return 0;
//}
但是后面这两个我就完全看不懂了,'\65'八进制对应的应该是53,但打印出来的却是5,就像最开始的字符串塞进单引号中只取最后的值一样,但是我的是转义序列呀。后来的就更离谱了,一个八进制,一个十六进制就没有一个是对的上的,不理解。
//int main(void)
//{
// char a = 97;
// char b = '97';
// char c[] = "97";
// printf("%c", a);//a
// printf("%c", b);//7
// printf("%s", c);//97
// return 0;
//}
之后是数字和数字字符的区别,直接输数字,出现的会是这个数字ASCII值对应的字符,只有打单引号的才是输出数值。
//int main(void)
//{
// char a;
// printf("The code for ");
// scanf("%c", &a);//会分行
// printf("is %d.\n", a);
// return 0;
//}
//int main(void)
//{
// char ch;
// scanf("%c", &ch);
// printf("The code for %c is %d.\n",ch,ch);
// return 0;
//}
通过上述代码就可以知道字符对应的ASCII值,第一种在用scanf时会在输完后自下一行开始,不美观。而第二种就是将scanf给提到最前面避免了这种问题。根据书中对char的讲解,char其实也算是一种整形,所以是可以用%d来打印的,只不过打印出来的结果是该字符对应的ASCII值,这里也就是运用这个技巧来实现字符与ASCII值互换的。
标签:练习,return,int,void,第七次,C语言,char,printf,main From: https://blog.51cto.com/u_16187763/6922640