小白快进来,一篇文章彻底带你弄清C语言常见的输入输出函数

目录

1.printf函数

(1)printf函数的语法

(2)printf函数的宽域

(3)printf函数的返回值

2.scanf函数

(1)scanf函数的语法

(2)scanf函数的返回值

3.getchar函数

(1)getchar函数的语法

4.putchar函数 

(1)putchar函数的语法

5.gets函数和puts函数

(1)gets的语法 

(2)puts的语法


        在C语言中常见的输入输出函数有六个,分别是scanf'函数,printf函数,getchar函数,gets函数,putchar函数,puts函数,本篇文章就带你一次搞定这些函数的用法。

1.printf函数

printf函数是一个输出函数,能将数据打印到终端中,使用前需引用头文件stdio.h

(1)printf函数的语法

printf(格式控制,输出列表);

①格式控制:是由双引号括起来的一个字符串,它里面包含两个信息,分别为格式声明和普通字符。格式声明是由%和格式字符组成,比如%d,%f,%p等。他的作用是将格式列表中的数据按照指定的方式输出。普通字符在输出后原样输出。看一下实例测试,快速了解该函数用法。

#include <stdio.h>
int main()
{
	int num = 95;
	printf("这是数字%d\n", num);
	printf("这是字符%c\n", num);
	printf("这是地址%p\n", num);
	return 0;
}

以下为该函数的输出结果

        明明同一个数据为什么打印出不同的结果呢?那是因为三个语句都用了不同的格式声明,%d是打印一个十进制的数字,%c是打印一个字符,而图中下划线的ASCII值正是95,%p是以地址的形式打印,编译器输出的是一个16进制的数字,0000005F转换为十进制的值也正是95。以下为一些常见的格式声明。

格式声明说明
%d以带符号的十进制形式输出整数
%o以八进制无符号形式输出整形
%x,%X以十六进制无符号形式输出整形
%u以无符号十进制形式输出整形
%c以字符形式输出一个字符
%s输出字符串
%f以单精度浮点型形式输出小数
%lf以双精度浮点型形式输出小数
%p以地址的形式输出

(2)printf函数的宽域

        在格式声明中,我们还可以控制输出的格式,我们通过在%和字母之间加入一个数字,规定输出数字所占的宽度,比如printf("这是数字%5d\n", num);,中间的5规定了num这个数字占5个位置,如果不够则原样输出,如果溢出则在左边补空格直至充满5个位置为止,如果是负数则在右边补空格。

 注:标点符号也算一个位置。

(3)printf函数的返回值

       先说结论,printf函数的返回值是,该函数打印字符的个数,接下来通过一道经典的题目带你仔细品味该函数返回值的用法。

#include <stdio.h>
int main()
{
    int num = 43;
	printf("%d", printf("%d", printf("%d", num)));
    return 0;
}

以上代码的结果为4321,那么为什么是这个结果呢?

分析:通过观察可以发现第五行代码由三个printf函数组成,要想知道第一个printf函数的打印结果需要知道嵌套的第二个printf函数的返回值,要知道第二个printf函数的返回值得知道嵌套的第三个printf函数的返回值,第三个printf函数执行打印数字43,由于打印了两个字符因此返回2,因此第二个嵌套函数打印了2,并返回了打印字符的个数,即1,因此最外层的printf函数打印1,最终结果因此为4321。

2.scanf函数

scanf函数是一个输入函数,能从键盘中读取数据,使用前需引用头文件stdio.h

(1)scanf函数的语法

scanf(格式控制,地址列表);

        格式控制就不再多做介绍,与printf函数中的格式控制大体相同,通过阅读以下代码,了解scanf函数的用法。

#include <stdio.h>
int main()
{
	char ch = 'a';
	int num = 0;
	double f = 0;
	scanf("%c %d %lf", &ch, &num, &f);
	printf("%c\n", ch);
	printf("%d\n", num);
	printf("%f\n", f);
	return 0;
}

 有以下几点需要特别注意:

①&为取地址符,地址列表中只能放地址的参数,如果是数组可放数组名,因为数组名代表首元素地址。

②在格式控制中,尽量不要添加普通字符,因为添加普通字符时,在你从键盘中输入数据时,也要将这些普通字符添加上。

③scanf函数不会读取空格和回车,所以在写入以上数据时,每写一个数据就空一格或换行。

(2)scanf函数的返回值

        scanf函数的返回值是该函数读取数据的个数,牛客网有许多多组输入的试题都可以通过该函数的返回值来实现。

例:判断一个数是否为奇数,如果是则输出该数字,要求多组输入,并输出。

#include <stdio.h>
int main()
{
	//创建num变量,输入的数字都存入num变量中
	int num = 0;
	while (scanf("%d", &num) == 1)
	{
		if (num % 2 == 1)
		{
			printf("%d ", num);
		}
	}
	return 0;
}

        以上 while (scanf("%d", &num) == 1) 此行代码等价于while (scanf("%d", &num) != EOF)和

while (~scanf("%d", &num))。

        EOF即是end of file的缩写,意思是文件的结尾,当scanf读取不到数据或者读入错误时,会返回EOF,EOF的本质或者说他的值是-1,下图是VS源码对EOF的定义。

3.getchar函数

getchar函数是一个读取字符的函数,使用前需使用头文件stdio.h

(1)getchar函数的语法

char ch = getchar( );

        该函数并无参数,返回值是从键盘上读取的字符,如果读取错误或者无法读取数据则返回EOF。 

注:该函数与scanf函数类似,但在使用中依然有一些细节需要注意

1.该函数只能用来读取字符,不能用来读取其他数据

2.该函数可以读取空格和回车,而scanf不能读取空格和回车

可以通过以下两段代码细细品味其中的细节

代码一:

#include <stdio.h>
int main()
{
	char str[20] = { 0 };
    //键盘输入 abc ef
	scanf("%s", str);
	printf("%s\n", str);
	return 0;
}

         scanf函数只能读取空格之前的数据,本例中并未读取,可以体现scanf函数不能读取空格的特性。

代码二:

#include <stdio.h>
int main()
{
	char psw[20] = { 0 };
	printf("请输入您的密码:");
	scanf("%s", psw);
	printf("请确认(Y/N):");
	getchar();
	if ('Y' == getchar())
	{
		printf("确认成功");
	}
	return 0;
}

        本段代码中,第八行为上面会用一个getchar函数呢?这就涉及到了内存的读写数据,以下简单的介绍缓冲区及其作用。

         如上图,键盘输入数据时,并不是直接存入内存中的,而是先将数据存入缓冲区,然后一个一个的读取数据。在以上代码中,假设我输入的是abcdefg这个字符串作为密码,abcdefg确实被存进了psw这个数组中,由于scanf函数不会读取换行符号,因此缓冲区存在一个\n,如果没有第八行的getchar函数,if语句中的getchar函数会读取到\n,if语句里的条件表达式就永远不会为真,该程序就出现了bug。故第八行的getchar函数的目的是为了清空缓存区。

4.putchar函数 

putchar函数是一个输出函数,将字符打印到屏幕上,使用前需引用stdio.h文件

(1)putchar函数的语法

putchar(字符常量或变量); 

         该函数不仅仅能将字符常量或变量作为参数,还可以将int型的变量或常量作为参数,当将int型作为参数时,作用是打印该整型对应的ASCII值。

#include <stdio.h>
int main()
{
	char ch = 'A';
	//将字符变量作为参数
	putchar(ch);
	//将字符常量作为参数
	putchar('a');
	int i = 98;
	//将整型常量作为参数
	putchar(66);
	//将整型变量作为参数
	putchar(i);
	return 0;
}

5.gets函数和puts函数

        gets函数是一个输入函数,其功能是将键盘获取输入的字符串,puts函数则是一个输出函数,其功能是将字符串打印到屏幕上,使用它们前都需要引用头文件stdio.h

(1)gets的语法 

gets(字符数组名);

 该函数有以下需要注意点:

1.gets函数可以读取空格。

2.gets函数在读取结束后,默认加一个回车。

(2)puts的语法

puts(字符数组名);

 该函数与gets函数特点类似,可以输出空格,在输出结束后也会默认添加回车。

通过以下代码体会这两个函数的特点:

#include <stdio.h>
int main()
{
	int str[20] = { 0 };
	gets(str);
	puts(str);
	//测试puts是否添加换行符
	printf("1");
	return 0;
}

结语:以上就是本人在学习期间对这六个函数的理解,如有错误,欢迎广大读者纠正。

  • 37
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值