一 输入输出函数
1.1 getchar()/putcgar()
1.1.1getchar()
头文件:#include
原型:int getchar(void);
功能:从终端读取一个字符
参数:无
返回值:从终端读取到的字符
#include <stdio.h> int main(int argc, const char *argv[]) { /*int ch; ch = getchar(); printf("ch = %c %d\n",ch,ch); */ int a,b,c; a = getchar(); b = getchar(); c = getchar(); printf("a = %c %d\n",a,a); printf("b = %c %d\n",b,b); printf("c = %c %d\n",c,c); return 0; }
1.1.2 putchar
头文件:#include 原型:int putchar(int c); 功能:向终端输出一个字符 参数:c:要输出的字符 返回值:输出的字符
#include <stdio.h> int main(int argc, const char *argv[]) { //参数为一个字符 putchar('w'); putchar('\n'); //参数为一个ascii putchar(97); putchar(10); int a = 'h'; int b = 10; putchar(a); putchar(b); return 0; }
1.2 gets()/puts()
1.2.1 gets()
头文件:#include 原型:char *gets(char *s); 功能:从终端读取一个字符串 参数:s:保存读取的数据的内容,一般是一个数组,char buf[32] 返回值:保存的字符串
#include <stdio.h> int main(int argc, const char *argv[]) { char str[32] = {0}; gets(str); printf("str = %s\n",str); return 0; }
1.2.2 puts()
头文件:#include 原型:int puts(const char *s); 功能:向终端输出一个字符串 参数:s:要输出的内容 返回值:输出的字符串的字节数
#include <stdio.h> int main(int argc, const char *argv[]) { //puts函数自带换行功能 puts("hellworld"); char s[32] = "helloworld"; puts(s); char buf[32] = {0}; gets(buf); puts(buf); return 0; }
3.3 printf()/scanf()
3.3.1 printf()
printf函数是一个行缓冲函数(1024K),先将内容写到缓冲区,满足一定条件后,才会将内容写入对应的文件或者流中 1.缓冲区满 2.写入的字符中有‘\n’,'\r' 3.调用fflush或stdout手动刷新缓冲区 4.调用scanf等要从缓冲区读取数据时,也会将缓冲区内的数据刷新 5.程序结束时
头文件:#include 原型:int printf(const char *format, ...); 功能:向终端按照格式输出字符串 参数:format:带格式要输出的内容 普通字符:原样输出 例如:printf("hello world!\n"); 格式说明: %[修饰符]格式字符,用于指定格式输出 例如:printf("a = %d\n",a); %d: 32位有符号十进制数 %u: 32位无符号十进制 %o: 八进制 %x: 十六进制 %e: 指数形式 %c: 字符 %s: 字符串 %%:输出%本身 %p: 输出地址 附加格式字符: #: 用于输出八进制或者十六进制的前导符 l: 用于输出long类型或者double类型的数据 m: 设置输出内容的宽度 如果数据的宽度大于等于m,则没有影响, 如果数据的宽度小于m,则默认右对齐,做扁的位置补空格 0:当设置宽度后,默认右对齐,左边空格的位置补0 -:将右对齐改成左对齐 .n:保留小数点后n位 arg:可变参,可以有,也可以没有,也可以有多个 返回值:输出的字节个数
#include <stdio.h> int main(int argc, const char *argv[]) { int num = 256; printf("%d%d%d\n",num,num,num); //5:将输出的宽度设置为5 printf("%5d%5d%5d\n",num,num,num); //0:右对齐左边补0 printf("%05d%05d%05d\n",num,num,num); //-:右对齐改成左对齐 printf("%-5d%-5d%-5d\n",num,num,num); //:0不能用于左对齐 printf("%-05d%-05d%-05d\n",num,num,num); float f = 45.45678912345; printf("f = %f\n",f); //.2:保留小数点后2位,并且会四舍五入 printf("f = %6.3f\n",f); printf("f = %p\n",&f); return 0; }
3.3.2 scanf()
头文件:#include 原型: int scanf(const char *format, ...); 功能:按照格式从终端输入指定的内容 参数:format:含有格式的字符的内容 格式字符: %d 整形数据 %f 浮点型数据 %c 字符数据 %s 字符串数据 。。。 返回值:成功保存的内容的个数
#include <stdio.h> int main(int argc, const char *argv[]) { /* int num; int ret = scanf("%d",&num); printf("ret = %d,num = %d\n",ret,num); */ /* char ch; scanf("%c",&ch); printf("ch = %c %d\n",ch,ch); */ /* char buf[32] = {0}; //scanf默认只能保存一个不带空格的字符串 scanf("%s",buf); //找到换行符才结束输入 scanf("%[^\n]",buf); printf("buf = %s\n",buf); */ /*int num; scanf("[%d]",&num); printf("num = %d\n",num); */ int a,b,c; scanf("%d,%d,%d",&a,&b,&c); printf("a = %d,b = %d,c = %d\n",a,b,c); return 0; }
3.3.3 scanf附加字符
m:设置输入的宽度,如果输入的内容超过设置的宽度,只会保存设置宽度的内容
:抑制符,当带有的格式的字符输入的内容不会保存到与之对应的变量中,而是将下一个不带*的格式的字符的内容保存在之前的变量中
#include <stdio.h> int main(int argc, const char *argv[]) { /* int year,month,day; scanf("%2d%2d%2d",&year,&month,&day); printf("%d/%d/%d\n",year,month,day); char buf[32] = {0}; scanf("%5s",buf); printf("buf = %s\n",buf); */ int a,b,c; scanf("%d %*d %d %*d %d",&a,&b,&c); printf("a = %d,b = %d,c = %d\n",a,b,c); return 0; }
3.3.4 scanf输入多个内容以及垃圾字符的处理
#include <stdio.h> int main(int argc, const char *argv[]) { #if 0 int a,b,c; scanf("%d %d %d",&a,&b,&c); printf("a = %d,b = %d,c = %d\n",a,b,c); #endif #if 0 char a,b,c; scanf("%c%c%c",&a,&b,&c); printf("a = %c,b = %c,c = %c\n",a,b,c); #endif /* 一个scanf处理垃圾字符 */ //方法1:使用抑制符 /* char a,b,c; scanf("%c%*c%c%*c%c",&a,&b,&c); printf("a = %c,b = %c,c = %c\n",a,b,c);*/ //方法2:使用空格隔开 /*char a,b,c; scanf("%c %c %c",&a,&b,&c); printf("a = %c,b = %c,c = %c\n",a,b,c);*/ /*多个scanf处理垃圾字符*/ int id; char name[32]; char sex; int score; char bg; /* printf("请输入学号:"); scanf("%d",&id); printf("请输入姓名:"); scanf("%s",name); printf("请输入性别:"); scanf("%c",&sex); printf("请输入分数:"); scanf("%d",&score); printf("请输入年龄:"); scanf("%d",&age); */ #if 0 //使用抑制符 printf("请输入学号:"); scanf("%d",&id); printf("请输入姓名:"); scanf("%s",name); printf("请输入性别:"); scanf("%*c%c",&sex); printf("请输入分数:"); scanf("%d",&score); printf("请输入是否有女朋友:"); scanf("%*c%c",&bg); #endif #if 0 //使用getchar printf("请输入学号:"); scanf("%d",&id); printf("请输入姓名:"); scanf("%s",name); getchar(); printf("请输入性别:"); scanf("%c",&sex); printf("请输入分数:"); scanf("%d",&score); getchar(); printf("请输入是否有女朋友:"); scanf("%c",&bg); #endif // 使用空格 printf("请输入学号:"); scanf("%d",&id); printf("请输入姓名:"); scanf("%s",name); printf("请输入性别:"); scanf(" %c",&sex); printf("请输入分数:"); scanf("%d",&score); printf("请输入是否有女朋友:"); scanf(" %c",&bg); return 0; }
二 控制语句
2.1 概念
控制语句主要解决一些代码需要执行,一些代码不执行,或者相同的代码要执行很多次。
分类:
分支语句: if...esle switch...case... 循环语句: goto while do...while... for 辅助控制关键字: goto break continue return
2.2 if…else语句
2.2.1 if语句的形式
if(表达式) { 语句块 } 或: if(表达式) { 语句块1 } else { 语句块2 } if(表达式1) {语句块1} else if(表达式2) {语句块2} else {语句块3} 注意事项: 1.if的表达式非0即为真 if(0) //假 if(1) //真 if(0.00000001) //真 if(a)---->if(a != 0) if(!a) ---->if(a == 0) if(a = 0) //假 if(a = 1) //真 2.if或者else语句后面只有一条代码,可以不加{},但是一般为了不产生歧义,最好加上 3.else 后面不能跟表达式 if和else只能执行一条 else不能单独使用,而且else默认和与之最近的一个if关联。 if(表达式1) { if(表达式2) { } }
2.2.2 练习:大小写转换
在终端输入一个字符,如果是大写字母,将其转化为小写字母,如果是小写字母,将其转化为大写字母,并输入,如果是字符数字,将其转化为数字输出。
‘h’---->‘H’ ‘H’---->‘h’ ‘6’----->6 #include <stdio.h> int main() { char a; a = getchar(); if(a >= 'a' && a <= 'z') { a = a - ('a' - 'A'); putchar(a); } else if (a >= 'A' && a <= 'Z') { a = a + ('a' - 'A'); putchar(a); } else if (a >= '0' && a <= '9') { printf("%d\n",a - 48); } else { printf("error"); } return 0; }
2.3 swich…case语句
switch语句和if语句一样,也是分支语句,只不过switch语句用于条件过多的情况下使用
2.3.1格式
switch(变量或者变量表达式) { case 常量或者常量表达式1: 语句块1; //break; case 常量或者常量表达式2: 语句块2; break; case 常量或者常量表达式3: 语句块3; break; case 常量或者常量表达式4: 语句块4; break; defalut: 语句块n; break; }
#include <stdio.h> int main(int argc, const char *argv[]) { int num; printf("***1.注册 2.登录 3.退出***\n"); printf(">>>> "); scanf("%d",&num); switch(num) { case 1: printf("正在执行注册操作\n"); break; case 2: printf("正在执行登录操作\n"); break; case 3: printf("正在退出,请稍等..\n"); break; default: printf("您输入有误,请重新输入\n"); break; } return 0; }