学到了char的相关知识,写篇文章记录一下。
int也可以用来接收char类型的数据,此时int变量的值是char值对应的ASCII码。
在这个例子里输入q,int变量存储的是q对应的ASCII码值113,同时还换行输出了一个10。
输出这个10是因为在输入q之后输入了换行,因此putchar将换行也输出了。
这里为什么用int来存储字节,而不是用char呢?我们后面再解释
我们修改一下程序再测试一次。
这次不再输出换行符了。
补充:int=0时没有对应的字符,因为ASCII码0表示NULL,空字符。
同时还发现了一个新问题:getchar一次只能处理一个字符,为什么可以一次键入多个字符呢?
经过一番查阅在其他老哥的博客上找到了答案;
因为当getchar调用的时候,程序就会等待用户输入,将用户的输入全部存在键盘缓冲区里面,直到用户输入回车为止,因此缓冲区的最后一位往往是\n(也可以是EOF,后文再说)。 然后getchar会依次处理键盘缓冲区里的内容,直到缓冲区中的字符读完后,才算是执行完成。
接下来解释EOF ,顺便解释开头图片红框圈住的文字
EOF(End Of File)是文件结束符,在Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D。
EOF在标注库里定位为-1。
同时char有signed和unsigned之分,C语言标准中没有规定,所以这就取决于编译器的实现了。
如果是signed char,赋值为-1没什么问题。
如果是unsigned char,则不能赋值为负数。
因此为了避免将-1赋值给unsigned char的情况,函数中不用char来存储输入的字符,而选择int来存储,因为int默认是signed,unsigned int需要特殊声明。