在使用函数getchar()的过程中,我们通常将得到的字符存储到一个int整型变量,而不是char字符变量,其原因是:
首先,我们要明确函数getchar()是将输入的字符转换成ASCII码保存到整型变量当中,当我们使用这个函数时,在计算机中的运行过程为:
1)函数访问输入缓冲区,发现输入缓冲区是空白的,等待输入;
2)输入一串字符,这串字符会暂时存储到输入缓冲区;
3)函数按顺序读取输入缓冲区中的字符,并转换成ASCII码,且每次只能读取一个字符并进行转换ASCII码赋值给某个整型变量;
我们在使用函数getchar()时,getchar()是按行进行存取的,即通常使用换行词(即“\n",回车)或者EOF(end of file)作为结束标志;而函数通常返回值是字符的ASCII码,是非负值,但是也有可能是EOF(end of file),而EOF通常定义为值-1,即
#dinfine EOF (-1)
我们可以这样写代码:
int main()
{
int ch = 0;
while(( ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
所以当我们需要使函数getchar()返回值为EOF时,使用char字符变量就会出现问题(在不同的编译器中char值有可能为-128~127或者0~255,PS.char值长度为8,所以最多可以存储2^8=256个变量,最前方一位是符号位,但在不同的编译器中,默认char有可能是无符号位的,这时char的范围就是0~255),因此我们必须用一个涵盖范围更大的变量类型来接收所有getchar()的返回值,包括所有字符和EOF,而int就可以满足这一点,避免程序报错。