关于多组输入的getchar()问题

在大家刚开始多组输入时,可能会出现一些问题,今天就用这篇文章来解决一下。

请看这道牛客网的OJ题
描述:实现字母的大小写转换。多组输入输出。
输入描述:多组输入,每一行输入大写字母。
输出描述:针对每组输入输出对应的小写字母
例如:
A
a
B
b

在做之前我们要知道ASCII表中字母的值(如下图)

ASCII表

发现大写字母与对应的小写字母相差32.例如A+32=a.

下面我们要先知道这两个函数:

getchar()--获取一个字符,输入一个字符 	
putchar()--打印或者说输出一个字符。
#include <stdio.h>
int main() {
    int ch;//getchar返回值是int型
    while (ch = getchar()) 
    {
        putchar(ch + 32);
    }
    return 0;
}

输出a*
这是怎末回事, " * ”是怎么来的?

其实是我们输入的回车\n造成的

我们要知道这样一件事,就是getchar和键盘之间会有一个输入缓冲区

如

当我们从键盘输入A字符时,我们需要回车一下来确定一下,这样缓存区就有了A和\n,当getchar来取时只会取走一个字符A,剩下\n

如

putchar出a之后,循环再次去getchar而\n + 32 = *

在这里插入图片描述

综上也就出现了a*

所以我们只需要在第二步时再把\n吸收掉就可以了

#include <stdio.h>
int main() {
    int ch;
    while (ch = getchar()) 
    {
        putchar(ch + 32);
        getchar();//不需要赋值用不到,只吸收
    }
    return 0;
}

在这里插入图片描述

这样就可以了吗?不完全可以,我们这是一个循环,必须要有停下循环的条件,这里我们要引入EOF—文件结束标志`

#include <stdio.h>

int main() {
    int ch;
    while ((ch = getchar()) != EOF) 
    {      
        //putchar(ch + 32);
      	//printf("\n");
        printf("%c\n", ch + 32);//一句顶两句
        getchar();
    }
    return 0;
}

运行

而CTRL+Z键就时文件结束快捷键

好了,喜欢的话,有用的话点个关注吧!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值