C语言中常用的六大输入输出函数

我们在使用C语言的时候碰的最多的就是输入输出的函数,你们是否还记得我们写的第一个程序hello world,从这个程序开始我们就开始使用输入输出的函数,一直到你的代码生涯的结束这个输入输出都还在你的身边。
或许有人会觉得这个输入输出不是很简单嘛?基本就是用它来输入一下数据输出一下数据不就好了,有什么可注意的?如果你这样想了,那你大错特错了,其实并非如此,很多工程的问题都是出现在输入输出的函数,使用的时候不知道他的原理,然后导致其代码出现BUG。那么接下来我就带着你去看看这些都是怎么一回事。

第一个函数:printf();

这是输出函数,要使用它,那么我们要先引入系统头文件–#include <stdio.h>。
我们先从他的功能说起,这个函数是将原有的数据,按一定的格式输出显示于控制台。也就是它能以用户控制下的各种预定指定格式输出数据。
再来看看它的函数原型:int printf(“control string”, argument list);
返回值:返回输出字符的数量,如果错误会返回EOF。
函数的参数:有两个参数,其中 control string是顾名思义就是控制字符串,这个是用来控制输出格式的,它是由“ ”、纯文本、空格、格式命令、非打印字符组成。我们的控制字符都是放在“ ”中的,纯文本和空格在printf函数中它会原封不动的在屏幕中打印出来。而格式命令有很多,主要是用来限制一些变量、常量、表达式、函数(指有返回值的函数)的输出形式。具体的格式命令如下表:

单字符%c
字符串%s
带符号的十进制整数%d(整数的数字位数)
浮点数(十进制计数法)%f(数字的整数部分如实输出。小数部分保留 6 位。如果小数部分不是 6 位,末尾填零;否则,四舍五入取到 6 位)
浮点数(十进制计数法)%lf
浮点数(指数计数法)%e(小数点左侧保留一位数字,右侧保留 6 位数字(与上面的 %f 相同))
浮点数(%f或者%e中较短的一个)%g
不带符号的十六进制整数%x
不带符号的八进制整数%o
不带符号的十进制整数%u
再过来这个就是非打印字符了,非打印字符也很丰富,如下表:在这里插入图片描述
例如:printf(“5+2= %d\n”, 5+2); printf(“5+2= %f\n”, 5.0+2.0);
Printf(“hello, %s”, “world”); printf(“%%”); //输入百分号
第二个就是参数列表了,在控制字符串中%有几个,参数就有几个,参数的类型要和控制字符串中的向匹配(注意:int和单个字符的输出%c可以相互转换),这里的参数可以是变量、常量、表达式、函数(指有返回值的函数)。
重点来了,printf函数进阶(修饰符)
a.字符宽度修饰符,例如:printf(“%4d”,500); 可以用于浮点型、双精度型和字符数组型(字符串);范围宽度修饰符是一个整数,定义了数据项的最大范围宽度。
b.“-” 修饰符,例如:printf(“%-d”,500); 数据项在范围内向左对齐,从范围最左侧的位置开始输出数据项。
c.精度修饰符,例如:printf(“%.2f”,3.14159); 可以用在浮点型、双精度型或字符数组型(字符串)中;如果用在浮点型或双精度型数据中,数字字符串表示小数右侧最多可输出的数字位数。
d.“0” 修饰符(填充在数字左边,右边无效,保证数据准确性);字段的默认填充符是空格。如果用户希望用零作为填充符,需要使用此修饰符。
e.“*” 修饰符,如果用户不希望预先指定字段宽度,而希望程序来指定,则需要用到此修饰符。这个修饰符会有四舍五入的情况,如果要指定位数,那么我们要在数据前在加一个数据来表示我们的位数(printf("%.lf\n", 2, 80.0);不要忘记约束小数点后的要在*前面加小数点。printf("[%*.*f]",8,2,123.456);这里要注意在%*.*f这里的 . 前有一个这个表示约束整个数据的输出,也就是这个数据输出最多占8位,不足用空格补齐)。其实这个*修饰符只是做到可以用一个变量去替代他,然后就可以做到用程序去控制数据的输出格式。

第二个函数scanf()

这是输入函数,要使用它,那么我们要先引入系统头文件–#include <stdio.h>。
我们还是从这个函数的功能说起,用于接受数据,可以从键盘中输入数据。
它的函数原型:int scanf(“control string”, argument list);
返回值:输入成功的参数数量,否则返回0。
函数参数:这个也是由两部分组成,一个是控制字符串,另一个就是参数列表。
控制字符串,它也是由“ ”、纯文本、空格、格式命令、非打印字符组成。我们的控制字符串都是放在“ ”内,因为这个函数是用来作为输入的,所以当在控制字符串中插入了纯文本,空格,符号时,那么我们输入的时候也要在相同位置输入纯文本,空格,符号。(如:scanf(“%d n, %c”, &a, &b),在这里我们在输入的时候也要输入空格+n, 才行)。格式命令,同printf一样,不过他没有%g。非打印字符也是同上,不过我们在使用的时候不要使用到\n和\r(回车和制表符),主要是用到这个函数的话,那么你在结束这个scanf()函数的时候就要注意,你按一次回车不会结束这个函数,要按两次。
参数列表:在控制字符串中%有几个,参数就有几个,参数的类型要和控制字符串中的向匹配。我们这里的参数是变量的地址,如果是本身可以表示地址的,那么可以不需要用到&(数组)。(注意:int和单个字符的输出%c可以相互转)
我们以char类型输入数据的时候,以int类型输出,那么输出的是他的ASCII码,相同的如果我们以int输入数据,以char类型输出,那么输出的是对应ASCII码的数据。

我们在输入单个字符的时候要注意,我们最好把表示单个字符的格式命令(%c)放在最前面或者重新在写一个语句。因为我们在使用回车的时候,我们的缓存中会存储回车(\n),所以我们重新写的语句会把回车当做符号吸收,然后输出。所以我们在另外写一个语句前要先清除回车。用fflush(stdin)(这个函数可以清空输入缓存区,清空输出缓存区是用fflush(stdout))。要时刻记得scanf函数在使用完后,会在缓存区留下一个回车,可能会影响你下次的输入。

#include <stdio.h>

int a=0, b=0, c=0;
char demo=0;
scanf("%d %d %d",&a, &b, &c);
fflush(stdin); //这里就是先吸收回车,因为回车也是一个字符
scanf("%c", &demo);

第三个函数:getchar()

记得引入头文件#include <stdio.h>
①函数原型:int getchar(void);//没有参数。
②函数功能:从终端输入一个字符。
③返回值:返回输入字符的ASCII码,可以使用字符变量或者整型变量接收。
注意:getchar()函数没有参数,但仍然必须使用括号。缓冲字符,直到用户按回车键。虽然可以输入多个字符,但函数只接受第一个字符,其它字符会被存储在缓存区里面,等下次在碰到要输入的时候再取出来用。因为这个返回的是int,所以我们在接受字符的时候,用char类型的也可以接收。
例如:

#include <stdio.h>
char a=0;
a = getchar();

记得当我输入:1 2 3 4 5 6时他只会把1赋值给a其它不会赋值,留在缓存区之中等待下一次输入的到来,因为getchar只会吸收一个字符。
还有就是这个输入函数会吸收回车,并储存在变量里。

第三个函数:putchar()

①函数原型:int putchar(int c);
②函数功能:从终端输出一个字符, 且转换成ASCII码返回。
③函数参数:其中c要输出的字符,可以是字符型常量、字符型变量、整型常量、整型变量表达式、转义序列等。
④putchar() 的选项和效果,如下表:
在这里插入图片描述

getchar()和putchar()应用举例:

在这里插入图片描述

第五个函数:getch()

在使用这个函数的使用要导入系统库#include <conio.h>
①函数原型:int getch (void);
②函数功能:从终端输入一个字符。
③返回值:返回输入字符的ASCII码,可以使用字符变量或者整型变量接收。
④注意,这个函数在使用的时候并不会回显输入的字符,也就是会有一个保密的作用。这个函数也会吸收回车并储存在变量里面,这个函数吸收的回车和之前的不太一样,前面储存的形式是‘\n’,用getch储存起来是‘\r’。

第六个函数:putch()

在使用这个函数的使用要导入系统库#include <conio.h>
① 函数原型:int putch (int c);
② 函数功能:从终端输出一个字符, 且转换成ASCII码返回。
③ 函数参数:其中c要输出的字符,可以是字符型常量、字符型变量、整型常量、整型变量表达式、转义序列等。

getch()和putch()一起使用作为密码的输入

#include <stdio.h>
#include <conio.h>

int main()
{
	char key[9] = {0};
	char account[9] = {0};
	int i=0, j=0;
	printf("请输入你的账号:");
	while(1)
	{
		account[i] = getch();
		if(i==8)
		{
			if(account[i]=='\r')
				break;
			continue;
		}
		else
		{
			if(account[i]=='\r')
			{
				if(i==0)
				{
					printf("\n请输入你的账号:");
					continue;
				}
				else
					break;
			}
			else
			{
				if((account[i]>='0' && account[i]<='9') || (account[i]>='a' && account[i]<='z')||(account[i]>='A' && account[i]<='Z'))
				{
					putch(account[i]);
					i++;
				}
				else
					continue;
			}
		}
	}
	putch('\n');
	printf("你输入的账号是:");
	//这里是打印账号
	for(j=0; j<i; j++)
		putch(account[j]);
	
	j=0;
	printf("\n请输入你的密码:");
	while(1)
	{
		key[j] = getch();
		//对于回车的判断
		if(key[j]=='\r')
		{
			//至少输入一个密文
			if(j==0)
			{
				printf("\n请输入你的密码:");
				continue;
			}
			else
				break;
		}
		if(j==8)    //达到输入的数量后不再输入
		{
			continue;
		}
		else
		{
			//输入的是数字
			if((key[j]>='0' && key[j]<='9'))
			{
				putch('*');
				j++;
			}
			else if((key[j]>='a' && key[j]<='z') || (key[j]>='A' && key[j]<='Z'))  //输入的是字母
			{
				putch('*');
				j++;
			}
			else  //其他字符误操作
				continue;
		}
}

上面这个例子可以做到输入密码保密,而且输入的账号和密码只能是字母和数字。
到此对于这六个输入输出函数的使用就讲完了,讲起来是不是觉得很简单,不过等你用起来的时候就会觉得自己要注意的东西还有很多,所有的代码都是这样,只有等你自己真正用起来的时候才会知道他要注意什么,不然程序会出现BUG。记得去实操一遍哦。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值