为什么输入数字才会执行语句A,大哥救我
……while ((ch = getchar()) != '\n')
{
if (ch < '0' || ch > '9')
continue;
// 语句A
}
…………
这个判断的意思是:如果这个字符的ASCII码不在0~9(也就是数字)范围内,那么后面的内容省略,进行下一次循环
输入数字的话就不会 continue了 这个代码改写一下就容易理解了
…………
while ((ch = getchar()) != '\n')
{
if (ch >= '0' && ch <= '9') {
语句A
}
}
…………
这个代码和楼主代码的执行逻辑一模一样。 这个问题的关键点有两个
1、if语句中的ch < '0' || ch > '9'是什么意思
2、continue的作用
第一个问题if语句中的逻辑判断ch < '0' || ch > '9'是什么意思,它其实是用char型变量ch的ascii码值与字符'0'和字符'9'的ascii码值作比较,当ch的ascii码值小于'0'的ascii码值,或者大于'9'的ascii码值时,逻辑判断为真,否则为假。所以,意思就是当你输入的字符ascii码不是'0'到'9'的ascii码之间时,为真,否则为假,
https://baike.baidu.com/item/ASCII/309296?fr=aladdin
上面的百度百科中可以看到字符'0'的ascii码是48,'9'的ascii码是57,可以看到从48-57正好是字符'0','1'....'9',所以,上面的判断语句意思是当你输入的不是数字时为真,是数字时为假
第二个问题,continue的作用,continue语句的作用是,跳过当前循环中剩下的部分,直接开始下一次循环,用你贴的这一段语句为例
根据第一个问题的讨论我们知道,当输入的不是数字时,会执行if语句后面的continue,这时将直接跳过所有while循环中continue后面的语句(也就是语句A)。当你输入数字时,if语句后面的continue由于条件判断为假而不会被直接,于是就会接着执行下面的语句A
lightninng 发表于 2021-12-5 20:21
这个问题的关键点有两个
1、if语句中的ch < '0' || ch > '9'是什么意思
2、continue的作用
如果我输入的数字不是0-9,而是12或者22会怎么样
本帖最后由 lightninng 于 2021-12-6 15:02 编辑
tucc 发表于 2021-12-5 23:10
如果我输入的数字不是0-9,而是12或者22会怎么样
getchar()方法有点特殊,它的返回值是当前字符缓冲区中第一个字符。
1、当缓冲区中没有字符时会从键盘获取字符,然后把输入的所有字符(回车表示输入完成)都放入缓冲区,然后返回缓冲区第一个字符
2、当缓冲区有字符时,会直接返回缓冲区第一个字符,而不会让你从键盘输入
#include<stdio.h>
#include<conio.h>
void main()
{
char c;
while ((c=getchar())!='\n') /*每个getchar()依次读入一个字符*/
printf("%c",c); /*按照原样输出*/
printf("\n\n");
}
运行一下上面的程序,然后试试各种不同的输出是什么效果,以及为什么是那样的效果,注意,你的回车也被放入了字符缓冲区中
具体解释请看
http://bbs.bccn.net/thread-232014-1-1.html
页:
[1]