- 循环与分支
分析理解以下程序(1):
为什么当一输入完密码之后按下回车会立刻放弃确认密码呢?
因为当输入密码的时候输入完成后会按下回车键,回车键会出现\n.也就是当前输入缓冲区里是313515\n。第一个scanf读取的只是313515而\n被保留了下来,在第二个输入等待getchar等待时,发现输入缓冲区里有东西就会直接读取。
而后因为读取的是\n不是Y与我们编写的if程序发生反应,所以会执行else段放弃确认。
那我们应该如何解决这个问题?
我们应该想办法把输入缓存区里的东西清空。
我再读取一遍是不是就可以把\n拿走了?
答案的可以的
我们可以看到加了getchar之后程序成功的在请确认(Y/N)段停止了。
那然后我换一种输入方式只读取一遍也会直接跳过等待的。如:我输入“313515 QWQWQ”中间有空格加上后面的字符显然是会直接跳过的。
如果把读取改为循环,在输入缓存区循环读取,直到把里面的东西都读取完即可。
格式:While(放在哪(ch)=用谁去读(getchar())判断条件(!=’\n)’)
While((ch = getchar()) !=’\n’);
{
;
}
可以看到已经成功了
分析理解以下程序(2):
作用只会输出数字字符
- for循环
我们知道了while循环为什么还要有一个for循环呢?
语法:
For(表达式1;表达式2;表达式3)
循环语句;
表达式1表达式1为初始化部分,用于初始化循环变量的。表达式2表达式2为条件判断部分,用于判断循环时候终止。表达式3表达式3为调整部分,用于循环条件的调整。
打印出1-10
For(i=1;i<=10;i++)
{
Printf(“%d”,i);
}