没有什么比时间更有说服力了,因为时间无需通知我们就可以改变一切了。---余华《活着》
大家好,今天给大家分享的是C语言中的scanf与printf函数,一提起这两个函数,大家可能觉得这不就是打印和输入嘛?有什么可以说的,嘿嘿,还真的有。
你知道printf的返回值是什么吗?
scanf的返回值呢?
对于输入一个%c的字符,使用scanf,输入空格时,会发生什么?
如果你不知道这些,那下面这篇文章可以帮助你更好的了解这两个核心函数的特性,请听我一一道来:
目录:
printf ||scanf
1.描述
2.声明
3.参数
4.返回值
5.实例
6.规定符
一.C 库函数 - printf()
1.描述
C 库函数 int printf(const char *format, ...) 发送格式化输出到标准输出 stdout。
printf()函数的调用格式为:
printf("<格式化字符串>", <参量表>);
2.声明
下面是 printf() 函数的声明。
int printf(constchar*format, ...)
3.参数
format -- 这是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier,具体讲解如下:
- 附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
4.返回值
如果成功,则返回写入的字符总数,否则返回一个负数。
5.实例
下面的实例演示了 printf() 函数的用法。
#include <stdio.h> int main () { int ch; for( ch = 75 ; ch <= 100; ch++ ) { printf("ASCII 值 = %d, 字符 = %c\n", ch , ch ); } return(0); }
编译并运行上面的程序,这将产生以下结果
ASCII 值 = 75, 字符 = K ASCII 值 = 76, 字符 = L ASCII 值 = 77, 字符 = M ASCII 值 = 78, 字符 = N ASCII 值 = 79, 字符 = O ASCII 值 = 80, 字符 = P ASCII 值 = 81, 字符 = Q ASCII 值 = 82, 字符 = R ASCII 值 = 83, 字符 = S ASCII 值 = 84, 字符 = T ASCII 值 = 85, 字符 = U ASCII 值 = 86, 字符 = V ASCII 值 = 87, 字符 = W ASCII 值 = 88, 字符 = X ASCII 值 = 89, 字符 = Y ASCII 值 = 90, 字符 = Z ASCII 值 = 91, 字符 = [ ASCII 值 = 92, 字符 = \ ASCII 值 = 93, 字符 = ] ASCII 值 = 94, 字符 = ^ ASCII 值 = 95, 字符 = _ ASCII 值 = 96, 字符 = ` ASCII 值 = 97, 字符 = a ASCII 值 = 98, 字符 = b ASCII 值 = 99, 字符 = c ASCII 值 = 100, 字符 = d
以下示例输出各种实例化字符
#include <stdio.h> int main() { char ch = 'A'; char str[20] = "www.nowcoder.com"; float flt = 10.234; int no = 150; double dbl = 20.123456; printf("字符为 %c \n", ch); printf("字符串为 %s \n" , str); printf("浮点数为 %f \n", flt); printf("整数为 %d\n" , no); printf("双精度值为 %lf \n", dbl); printf("八进制值为 %o \n", no); printf("十六进制值为 %x \n", no); return 0; }
编译结果如下:
字符为 A 字符串为 www.nowcoder.com 浮点数为 10.234000 整数为 150 双精度值为 20.123456 八进制值为 226 十六进制值为 96
6.规定符
- %d 十进制有符号整数
- %u 十进制无符号整数
- %f 浮点数
- %s 字符串
- %c 单个字符
- %p 指针的值
- %e 指数形式的浮点数
- %x, %X 无符号以十六进制表示的整数
- %o 无符号以八进制表示的整数
- %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
- %p 输出地址符
- %lu 32位无符号整数
- %llu 64位无符号整数
二.C 库函数 - scanf()
1.描述
C 库函数 int scanf(const char *format, ...) 从标准输入 stdin 读取格式化输入。
2.声明
下面是 scanf() 函数的声明。
int scanf(constchar*format, ...)
3.参数
- format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为:
具体讲解如下:
scanf 类型说明符:
附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
4.返回值
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
5.实例
下面的实例演示了 scanf() 函数的用法
#include<stdio.h> int main(void) { int a,b,c; printf("请输入三个数字:"); scanf("%d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); return 0; }
运行结果如下:
1. 请输入三个数字:1 2 3 2. 1,2,3
解析说明:
- 1、&a、&b、&c 中的 & 是地址运算符,分别获得这三个变量的内存地址。
- 2、%d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。
如果使用 , 来分隔输入的 %d, 相应的输入时也需要添加 ,:
#include<stdio.h> int main(void) { int a,b,c; printf("请输入三个数字:"); scanf("%d, %d, %d",&a,&b,&c); printf("%d, %d, %d\n",a,b,c); return 0; }
让我们编译并运行上面的程序,这将在交互模式下产生以下结果:
1. 请输入三个数字:1, 2, 3 2. 1, 2, 3
注意:输入时 , 前一定要紧跟在数字后面,数字与 , 之间不能有空格。
在用 %c 输入时,空格和"转义字符"均作为有效字符。
#include<stdio.h> int main(void) { char a,b,c; printf("请输入三个字符:"); scanf("%c%c%c",&a,&b,&c); printf("%c,%c,%c\n", a,b,c); return 0; }
让我们编译并运行上面的程序,这将在交互模式下产生以下结果:
$ ./a.out 请输入三个字符:run r,u,n $ ./a.out 请输入三个字符:r u n r, ,u
以下实例演示的是接收字符串:
#include <stdio.h> int main() { char str1[20], str2[30]; printf("请输入用户名:"); scanf("%s", str1); printf("请输入您的网站:"); scanf("%s", str2); printf("输入的用户名:%s\n", str1); printf("输入的网站:%s", str2); return(0); }
让我们编译并运行上面的程序,这将在交互模式下产生以下结果:
请输入用户名:admin 请输入您的网站:www.nowcoder.com 输入的用户名:admin 输入的网站:www.nowcoder.com
这篇文章分享到这里,有什么问题评论区一起讨论,共同进步!
博主目前大一,还在学c和c++一些底层的知识点,数据结构,目前已经学完数据结构,正在刷算法题目,万事开头难,算法起步非常难,还在继续加油。可以关注我,一起进步。
2023.02.10
From:努力进大厂的新青年