函数三要素:功能、参数、返回值
1. 按字符输入输出
1.1按字符输出putchar()
1.1.1介绍
int putchar(int c);
功能:向终端输出一个字符
参数:c:要输出字符的ASCII值
返回值:要输出字符的ASCII值。当输出错误的时候,返回 EOF(End of file)文件结束符分
int a = 10;
putchar('A'); //A
putchar(97); //a
putchar(10); //换行
putchar('A' + 32); //a
putchar(a); //换行
1.2 按字符输入 getchar()
1.2.1 介绍
int getchar(void);
功能:从终端输入一个字符
参数:无
返回值:输入字符的ASCII值。如果到达文件末尾或发生读错误,则返回 EOF。\
#include <stdio.h>
int main()
{
int ch;
ch = getchar(); //获得getchar()的返回值然后赋值给ch变量
putchar(ch);
ch = getchar();
putchar(ch);
return 0;
}
注意:后面输入多余的字符会放在输入缓存区中等待输入。如果后面遇见输入功能的函数,则会完成输入。也就是我们敲的回车也会放在输入缓冲区等待输入。字符是排队等待输入的,例如流水线上的零件,排队依次等待加工。如果要解决可以在后面跟一个getchar()。
2. 按格式输入输出
2.1按格式输出printf()
2.1.1介绍
查看手册用man 3 printf:
int printf(const char *format, ...);
功能:按照指定格式向终端输出
参数:format:用双引号括起来的格式控制串和输出表。
返回值:输出字符的个数(不常用)
2.2.2格式
printf("格式控制串", 输出表);
格式控制串:包含两种信息
1. 普通字符:原样输出
2. 格式说明:修饰符%后面加格式字符,用于指定输出格式。
输出表:要输出的数据(可以没有,多个时用逗号分隔)
int a = 10, b = 30;
printf("输出两个int类型的数据:a=%d, b=%d\n", a, b);
格式字符:
%dint
%ldlong
%ffloat
%lfdouble
%cchar
%s字符串
%x十六进制
%o八进制
%u十进制无符号整数
%p地址
%e指数
%m.n含义:
.n: 对实数指定小数点后的位数(四舍五入)
对字符串,指定实际输出的位数
m: 位宽,输出数据的域宽,数据长度<m, 左边补空格,否则按实际输出。
-:左对齐,默认右对齐
0:输入数值时时指定左边不用的空位置自动补0
例子:
int a = 123;
float b = 12.345;
char c = 'd';
printf("%2d,%8d,%08d,%-8d\n", a, a, a, a);
printf("%f,%10f,%8.2f,%08.2f\n", b, b, b, b);
printf("%s,%10.2s,%-10s\n", "hello", "hello", "hello");
输出:
123, 123,00000123,123
12.345000, 12.345000, 12.35,00012.35
hello, he,hello
2.2 按格式输入scanf()
2.2.1介绍
int scanf(const char *format, ...);
功能:按格式从终端输入
参数:同printf
返回值:正确输入数据的个数。当第一个数输入格式不正确时,会直接返回0。
2.2.2格式
scanf("格式控制串", 地址表);
地址表:变量的地址,常用取地址运算符&
格式字符:doxucsfe
例如:
int a, b;
scanf("%d %d", &a, &b);
printf("a= %d, b= %d\n", a, b);
注意:用scanf时“”中不要写上除了格式控制字符以外的东西,不然输入的时候要按原样输入才可以。
2.2.3垃圾字符问题
注意:
scanf函数输入回车符的问题,当用%c方式输入字符时,回车符会被下次的%c接收到。其他给格式不会出现这种问题。
例1:连续输入两个char类型:
char a, b;
scanf("%c", &a);
printf("%c\n", a);
scanf("%c", &b);
printf("%c\n", b);
第二次输入会读到回车
例2:连续输入两个int类型:
int a, b;
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &b);
printf("%d\n", b);
因为两次输入的都是int类型,下次输入就不会读到char类型的回车。
例3:先输入int类型在输入char类型:
int a;
char c;
scanf("%d", &a);
printf("%d\n", a);
scanf("%c", &c);
printf("%c\n", c);
第二次输入会直接读到回车
综上:只要第二次想输入char类型就会接收上次的回车。
回收垃圾字符:
(1) 通过空格回收
可以回收一个或多个空格、回车和tab
int a;
char c;
scanf("%d", &a);
printf("%d\n", a);
scanf(" %c", &c);
printf("%c\n", c);
(2) %*c
只能回收任意一个字符
int a;
char c;
scanf("%d", &a);
printf("%d\n", a);
scanf("%*c%c", &c);
printf("%c\n", c);
(3) getchar()
只能回收任意一个字符,一般用于循环里面
int a;
char c;
scanf("%d", &a);
getchar();
printf("%d\n", a);
scanf("%c", &c);
printf("%c\n", c);