无法理解getchar()与int结合

img


getchar()不是只能读人一个字符吗?有点难理解这个循环,有懂的可以帮忙看看这个小程序

第一次进入case 0
输出6之后没有遇到break,又输出6
第二次进入case 2
输出8
第三次因为没有case 5
所以进入default 输出 9
所以是6689

哪一步不懂?

这段程序的作用是读入用户输入的字符并进行判断,如果输入的字符是小写字母,则将其转换成对应的大写字母并输出,否则直接输出输入的字符。

getchar()函数是C语言中的一个标准库函数,其作用是从键盘读入一个字符,返回值为int类型,表示读入的字符的ASCII码值。因此,这里使用了getchar()函数来读入用户输入的字符,并将其存储在变量ch中。

在判断用户输入的字符是否为小写字母时,使用了C语言中的字符类型(char)和ASCII码值的关系。由于小写字母的ASCII码值范围是97~122,因此判断输入的字符是否为小写字母的条件为(ch >= 'a' && ch <= 'z')。

如果输入的字符是小写字母,那么就可以将其转换成对应的大写字母。由于小写字母和大写字母的ASCII码值相差32,因此将输入的字符的ASCII码值减去32即可得到对应的大写字母的ASCII码值。这里使用了C语言中的字符类型(char)和整型(int)的隐式类型转换,将减去32后的ASCII码值存储在变量ch中。

最后,使用putchar()函数将转换后的字符输出到屏幕上。需要注意的是,putchar()函数的参数也是一个整型(int)类型,表示输出字符的ASCII码值。因此,这里使用了C语言中的字符类型(char)和整型(int)的隐式类型转换,将变量ch中存储的ASCII码值转换成字符并输出到屏幕上。

c是int类型的,在用getchar输入的时候每次都会读取到一个字符。
第一次读取到字符‘2’,c-'2'得到的结果是0,进入case 0分支,输出字符6;但是没有break语句,所以会进入下一个分支,也就是case 1分支,输出字符6;
第二次读取到字符4,c-'2'的结果是2,进入case 2分支,输出字符8,执行break语句。
第三次读取到字符7,c-'2'的结果是5,进入default分支,输出字符9,执行break语句。
所以最后的答案是6689