1、代码分析
(1)getchar(); 操作步骤:1.取走stdin缓冲区的字符;若没有,等待从键盘输入(如abc\n);2.取走第一个 字符的对应的ASCII码,将其他字符对应的ASCII码存进stdin缓冲区中;
(2)ch=getchar();1.取走stdin缓冲区的字符;若没有,等待从键盘输入;2.将第一个字符对应的ASCII码存进 变量ch中,其他的存进stdin缓冲区中;
(3)putchar(params) 向控制台输入一个字符,putchar('a'),putchar(97)[0-127]
#include <stdio.h> int main() { int ch = 0; while ((ch = getchar()) != EOF) { putchar(ch); } return 0;
注意:
1、EOF对应键盘的输入为:ctrl+z, end of file 文件结束标志
2、getchar()函数实际上是int getchar(void),它返回的是ASCII码值,所以只要是ASCII码表里有的字符它 都能读取出来。在调用getchar()函数时,编译器会依次读取用户键入缓存区的一个字符
3、putchar(ch) 向终端输出一个字符,其中ch可以是被单引号引起来的一个字符,可以是介于0~127之间 的一个十进制整型数(包含0和127)(超过127就不是ASCII码了)
4、rewind(stdin): 清除缓冲区中的所有字符;
5、scanf函数在遇到空格,回车,制表符就会认为输入结束;
#include <stdio.h> void test2() { char a, b; printf("请输入a字符:\n"); a = getchar(); rewind(stdin);// 清理缓冲区的内容 printf("请输入b字符:\n"); b = getchar(); rewind(stdin);// 清理缓冲区的内容 printf("c=%c,c=%d; c=%c,c=%d\n", a, a, b, b); } void test3() { char password[20] = { 0 }; printf("请输入密码:"); scanf("%s", password); // scanf函数在遇到空格,回车,制表符就会认为输入结束 getchar();// 从缓冲区中取出回车符 printf("是否确认密码?(Y 是 N 否)\n"); int ret = getchar(); if (ret == 'Y') { printf("确认!"); } else { printf("取消确认!"); } } void test4() { int ch; while ((ch = getchar()) != EOF) { if (ch < '0' || ch > '9') { continue; } putchar(ch); } } void test5() { // 声明两个变量 a\n char a, b; scanf_s("%c", &a, 1); getchar(); scanf_s("%c", &b, 1); getchar(); printf("%c,%c", a, b); } void test6() { char a, b; int i = 1;//控制循环 while (i <= 3) { printf("对a,b进行赋值\n"); scanf_s("%c%c", &a, 1, &b, 1); // 取出回车符 getchar(); i = i + 1; printf("%c,%c\n", a, b); } } void test7() { char a, b; int i = 1;//控制循环 while (i <= 3) { printf("对a,b进行赋值\n"); scanf("%c%c", &a, &b); // 取出回车符 getchar(); i = i + 1; printf("%c,%c\n", a, b); } } void test8() { char name[5]; // 定义了一个字符数组 // 数组中第一个元素怎么表示 name[0] // 声明一个表示一标的变量 int i = 0; while (i < 5) { //printf("用户输入\n"); scanf("%c", &name[i]); // 更新循环变量 i = i + 1; } rewind(stdin);//清空缓冲区 // 打印 int j = 0; while (j < 5) { printf("%c\n", name[j]); j = j + 1; } } // 求两个数的最大值 int getMax(int a,int b) { int max = a; if (a<b) { max = b; } return max; } int main2() { test7(); char a, b; scanf("%c %c",&a,&b); printf("a=%c,b=%c\n",a,b); test8(); char str[5] = "hell"; printf("%s",str); char a, b; scanf("%c %c", &a, &b); printf("a=%c,b=%c\n", a, b); int max = getMax(10,20); max = getMax(max,30); return 0; }
2、for循环以及break 与 continue
//语法结构: for(表达式1;表达式2;表达式3){ 循环语句块; }
注释:
表达式1:初始化部分,用于初始化循环变量
表达式2:条件判断部分,用于是否进行循环操作的判断
表达式3:调整部分,用于更新循环变量
for循环中也只可以使用break和continue,它们的意义和在while循环中一样。
#include <stdio.h> int main() { for (int i = 1; i <= 10; i++) { if (i == 5) { break; // 退出循环 } printf("%d\n", i); } return 0; }
#include <stdio.h> int main() { for (int i = 1; i <= 10; i++) { if (i == 5) continue; // 结束本次循环 printf("%d\n", i); } return 0; }
for循环的变种
// 变种1 for (;;) { printf("死循环!"); } // 变种2 int i = 0; int j = 0; for (; i < 10; i++) { for (; j < 10; j++) { printf("hahaha"); } } // 变种3 int x, y; for (x = 0, y = 0; x < 2 && y < 5; ++x, ++y) { printf("hahaha"); }
3、do-while循环
do-while的语法:
do { 循环语句块; } while(表达式);
do-while循环的特点:
循环至少执行一次,使用的场景有限。
例如:用户输入考试成绩,如果没有通过,继续进行考试,直到通过为止。
#include <stdio.h> int main() { int score = -1; do { printf("请输入考试成绩:[0,100]"); scanf("%d", &score); } while (score < 60); printf("恭喜您,通过考试!"); return 0; }