输入输出函数

输入输出函数和分支控制语句

一、C语言中常用的输入输出函数

输入输出的方式,了解一下即可,会用就行,无需过度纠结他。

原因:

1、实际开发的项目中,基本没有和终端的交互,一般都是和文件交互;

2、笔试面试的过程中,基本上也不会考很多关于输入输出的方式;

我们学习这些方法就是为了方便学习阶段看现象,从而更好的理解知识点的。

1.1 putchar/getchar

1.1.1 putchar

功能:向终端输出一个字符

头文件:#include

函数原型:int putchar(int c);

参数: c 用来保存要输出字符的ascii码的

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//可以传 字符的 ascii码
	putchar(65);//A
	putchar(10);

	//也可以传字符常量
	putchar('B');//B
	putchar('\n');

	//也可传保存ascii码的变量
	int num = 67;
	putchar(num);//C
	putchar('\n');

	//也可以传一个表达式
	putchar('A'+3);//D
	putchar(10);

	return 0;
}

备注:

输入数字打印ASSCII码表对应值,输入ASSCII值输出对应数字

65-A 97-a 48-0 32-空格键space 10-\n 换行符

字符常量 ‘’ 里面包裹什么输出什么(特殊含义的除外如:\n 、\0)

1.1.2 getchar

功能:在终端获取一个字符

头文件:#include

函数原型:int getchar(void);

返回值: 输入的字符

#include <stdio.h>

int main(int argc, const char *argv[])
{
#if 0
	char value = 0;
	value = getchar();
	printf("您输入的字符是 [%d] [%c]\n", value, value);
#endif
	
	//当多个getchar连续使用时 要注意清理垃圾字符
	//所谓的垃圾字符 就是我们不想得到的 回车 空格 等

	char v1=0, v2=0, v3=0;
	v1 = getchar();
	getchar();//用来吃掉垃圾字符
	v2 = getchar();
	getchar();//用来吃掉垃圾字符
	v3 = getchar();
	getchar();//用来吃掉垃圾字符
	printf("v1 = [%d] [%c]\n", v1, v1);
	printf("v2 = [%d] [%c]\n", v2, v2);
	printf("v3 = [%d] [%c]\n", v3, v3);

	return 0;
}

1.2 puts/gets

1.2.1 puts

功能:向终端输出一个字符串

头文件:#include

函数原型:int puts(const char *s);

参数: s 要输出的字符串的首地址

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//可以直接输出字符串常量
	//puts 是自带换行符的
	puts("hello");//hello

	//也可以输出保存字符串的数组
	char str[32] = "beijing";
	puts(str);//beijing

	//也可以输出指向字符串的指针
	char *p = "www.baidu.com";
	puts(p);//www.baidu.com

	//puts遇到 '\0' 就停止了 后面的字符 不再继续输出
	puts("abcd\0efg");//abcd

	return 0;
}
1.2.2 gets

功能:在终端获取一个字符串

头文件:#include

函数原型:char *gets(char *s);

参数:s 用来保存输入的字符串的缓冲区的首地址

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//注意:使用gets 要保证用来保存字符串的数组足够大 否则会出现越界访问
	char s1[32] = {0};//定义了一个数组 并全部初始化成0

	gets(s1);

	puts(s1);

	return 0;
}

注意:使用gets 要保证用来保存字符串的数组足够大 否则会出现越界访问

1.3 printf/scanf

1.3.1 printf

功能:按照指定的格式,向终端输出一个字符串----格式化输出

头文件:#include

函数原型:int printf(const char *format, …);

参数:

format :格式

%c 输出字符

%d 输出整型,有符号

%u 输出整型,无符号

%o 输出八进制

%x 输出十六进制

%f 浮点型

%e 指数形式

%% 输出%

附加格式说明:

l (小写的L)输出 long 或者 long long 或者double时用的

# 输出前导符

.n 输出n位小数 n是一个数字

m m是一个数字,可以用来指定输出的数据的位宽

0 如果数据不足指定的位宽 则使用0填充

  •   左对齐
    
  •   如果是正数  输出时显示正号 负数会忽略+
    

… : 可变参,个数和类型取决于format

#include <stdio.h>

int main(int argc, const char *argv[])
{
	int hour = 10;
	int min = 9;
	int sec = 5;

	printf("%d:%d:%d\n", hour, min, sec);// 10:9:5
	printf("%2d:%2d:%2d\n", hour, min, sec);// 10: 9: 5
	printf("%02d:%02d:%02d\n", hour, min, sec);// 10:09:05

	int value = 1234;
	printf("%2d\n", value);//1234  如果指定的位宽不够 以实际为准

	printf("%10d\n", value);//默认右对齐
	printf("%-10d\n", value);//左对齐

	printf("%+d\n", value);// +1234
	value = -100;
	printf("%+d\n", value);// -100  负数会忽略 +

	return 0;
}
1.3.2 scanf

功能:按照指定的格式,在终端获取数据----格式化输入

头文件:#include

函数原型:int scanf(const char *format, …);

参数:

format :格式

和前面printf的用法基本一样。

注意:scanf的格式不能乱写,写成什么样的格式,输入就得按照什么格式输入

… : 可变参,个数和类型取决于format 如果是变量,记得要 &

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//--------------------int-----------------
#if 0
	int m = 0;
	int n = 0;
	//scanf 可以连续获取多个数据
	//输入时 使用 空格 或者 回车 分隔
	scanf("%d%d", &m, &n);
	printf("m = %d, n = %d\n", m, n);
	scanf("%d:%d", &m, &n);//如果是这样写格式 输入时就必须用 : 分隔
							//否则获取不到
	printf("m = %d, n = %d\n", m, n);
#endif

	//------------------char-----------
#if 0
	char m;
	scanf("%c", &m);
	printf("%c\n", m);
#endif

	//-------------float--------------
#if 0
	float m;
	scanf("%f", &m);
	printf("%f\n", m);
#endif

	//----------------string--------
	char str[32];
	//scanf("%s", str);//数组名就是首地址  无需加  &
	//printf("%s\n", str);
	//scanf不能输入带有空格的字符串
	//如果想输入带有空格的字符串  可以使用  gets
	//或者使用正则表达式也行 --不常用
	scanf("%[^\n]", str);//--正则表达式,了解即可
	printf("%s\n", str);

	return 0;
}

1.4 垃圾字符的处理

#include <stdio.h>

int main(int argc, const char *argv[])
{
	//场景1:多次连续调用 getchar() 时
	//处理方式:在每两次调用 getchar之间加一个getchar 用来吃掉垃圾字符 回车

#if 0
	//场景2:多次使用scanf连续获取字符时
	//处理方式:在每两次调用 scanf之间加一个getchar 用来吃掉垃圾字符 回车
	char a,b,c;
	scanf("%c", &a);
	getchar();
	scanf("%c", &b);
	getchar();
	scanf("%c", &c);
	printf("a = [%d] [%c]\n", a, a);
	printf("b = [%d] [%c]\n", b, b);
	printf("c = [%d] [%c]\n", c, c);
#endif
	//场景3:使用scanf 一次获取多个字符时
	char a,b,c;
	//scanf("%c%c%c", &a, &b, &c);
	
	//处理方式1:使用抑制符来处理  %*c
	//抑制符的作用是获取数据 但是 不赋值给后面的变量
		//注意:抑制符是一定要吃掉一个字符的 他并不管是不是垃圾字符
	//scanf("%c%*c%c%*c%c", &a, &b, &c);

	//处理方式2: 可以在格式中使用空格来处理--推荐的处理方式
		//空格可以吃掉多个空格 或者 回车
	scanf("%c %c %c", &a, &b, &c);
	printf("a = [%d] [%c]\n", a, a);
	printf("b = [%d] [%c]\n", b, b);
	printf("c = [%d] [%c]\n", c, c);

	//注意  %d 是不会有垃圾字符的问题的
	
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值