输入函数scanf 和 getchar()
- 计算机在从键盘、也就是标准输入流读取数据的时候,会有一个输入缓冲区,输入函数就从缓冲区里面拿数据。
2. 关于getchar()
返回的是读取到每个字符,字符在计算机中存储的是ASCII码值。
3. 确认密码的简单循环验证缓冲区
- scanf 把123456 拿走以后,还巧了个回车留在缓冲区里,getchar()获取一个字符的时候,就把回车键拿走了,所以确认失败
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);123456 也可以用 gets
printf("请确认密码(Y/N):>");
清理缓冲区
getchar(); 处理'\n' getchar()获取一个字符
}
4. 关于gets
5. 如果密码中有一个空格呢?
可以利用getchar()循环输入,返回的是字符的码值,对码值进行判断,直到读取到\n
为止。
清理缓冲区的中多个字符
int tmp = 0; 用tmp 接收返回值
while ((tmp = getchar()) != '\n')
{
;
}
printf("请确认》Y\N?");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
while循环小题
1.验证字符存的是ASCII 码值
int main()
{
int ch = 0;
while ((ch=getchar()) != EOF) ctrl+z是eof
{
if (ch < '0' || ch>'9') < 字符0 > 字符9 的意思 也就是小于或大于该对应的码值。
continue; 如果输入的字符不是0--9,则继续输入,直到判断为该字符是 0--9之间。
putchar(ch); 输出0--9 到屏幕上。
}
return 0;
}
< 字符 ‘0’ ,> 字符 ‘9’ 的意思
for循环。
1. 语法
for(表达式1;表达式2;表达式3)
循环语句;
表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断
循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
2. 使用for循环 在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 0;
for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
3. for循环的一些变种
j = 3 出去就没在初始化为0.
4. break 和 continue
-
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的
break是用于永久终止循环的。 -
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分。进行下一次循环的入口判断
5. for 循环变量的控制
- 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
- 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
6. for 循环的变种
- 恒为真
- 语法是支持的
2. 问:循环几次。
k=0;为假,就一次也不循环。
do while 循环语句
1. do 语句流程
3. 至少要循环一次,使用场景有限。
do 下面的语句执行完,在进行到判断部分要不要继续执行。
4. 例子
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
5. do 里面的break 和 continue 和其他循环一样的效果。
int main{
int i = 5;
do
{
if(5 == i)
continue; 死循环 不打印
//break; 一次也不打印
printf("%d\n", i);
}while(i<10);
return 0;
}
goto 语句
1. 概念:
goto语句也称为无条件转移语句,其一般格式如:goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加半角冒号“:”。语句标号起标识语句的作用,与 goto 语句配合使用。
2. 一般格式
- got 语句标号;
其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加半角冒号“:”。语句标号起标识语句的作用,与goto句配合使用。如:
label: i++;
loop: while(x<7);
goto loop; 跳到while 循环的部分
- C语言不限制程序中使用标号的次数,但各标号不得重名。goto 语句的语义是改变程序流向, 转去执行语句标号所标识的语句。
- goto 语句通常与条件语句配合使用。可用来实现条件转移, 构成循环,跳出循环体等功能。
- 但是,在结构化程序设计中一般不主张使用 goto 语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。
#include<stdio.h>
int n=0;
int main(void) {
printf("input a string: ");
loop: if (getchar()!='\n') {
n++;
goto loop;
}
printf("output: %d\n",n);
}
3. 一般作用
终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
for(...)
{
for(...)
{
for(...)
{
for(...)
{
if(u==999)
go to amazing;
}
}
}
}
amazing:
if(u==999)
...
关机小程序
int main()
{
char input[1024] ={0};
system("shutdown -s -t 60");
bulaoshi:
printf("请输入:我是弟弟,就取消关机!\n赶紧输吧:");
scanf("%s",input);
if(0==strcmp(input,"我是弟弟"))
{
system("shutdown -a");
}
else
{
goto bulaoshi;
}
return 0;
}