输入与输出

函数三要素:功能、参数、返回值

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);
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值