getchar()、scanf()和continue

今天碰到一个很有意思的代码,苦想了半天才想明白是怎么回事。问题就出现在getchar()这个函数上。getchar()每次从输入读取一个字符,也就是一个字节,包括空格和换行都会算进去。

 while((ch=getchar())!='q'&& ch!='Q')
    {
        if(ch=='\n')
            continue;
        while(getchar()!='\n')
            continue;
        ch = tolower(ch);
        switch(ch)
        {
        }
    }

上面的语句读取一个字符,如果字符是个回车键,就冒过不读,继续读取下一个字符,直到读到的字符不是回车键。当读到不是回车键的字符后,就判断它后面的字符是不是回车键,如果不是回车键就继续冒过,相当于只读取第一个不是回车键的字符,并冒过这个字符后面一直到回车键的所有字符。这样可以确保下次循环能读取到正确位置的字符。
scanf()和getchar()不同,它会以空格、回车、制表符作为分隔符,且能读取到其他数据类型的数据。当读取到正确类型的数据后,它有返回值,返回值为1.
continue和break不同,continue是跳过循环内剩下的代码,进入到下一个循环周期,而break顾名思义是直接跳出循环语句,进入到循环体外,当break在switch内时,是跳出switch,而不会跳出switch所在的循环体外。

还有个有意思的地方,就是getchar()任何时候都是对字符进行操作,在它眼中它读取的都是字符。就算你输入的是数字1,在它读取看来,它读的不是数字,是字符‘1’,如果将字符‘1’打印出来,显示的十进制是49,二进制是00110001。

在这里插入图片描述

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值