C语言中耳熟能详的printf与scanf

简介: C语言中耳熟能详的printf与scanf

没有什么比时间更有说服力了,因为时间无需通知我们就可以改变一切了。---余华《活着》


大家好,今天给大家分享的是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,具体讲解如下:


image.pngimage.png


image.png

image.png


image.png


image.png


  • 附加参数 -- 根据不同的 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 说明符形式为:


image.png


具体讲解如下:


image.png


scanf 类型说明符:


image.png

image.png


附加参数 -- 根据不同的 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:努力进大厂的新青年

相关文章
|
4月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
2月前
|
C语言
初识C语言:与计算机的交流之输入与输出(scanf和printf)
初识C语言:与计算机的交流之输入与输出(scanf和printf)
205 0
|
3月前
|
存储 C语言 数据格式
【C语言基础考研向】03混合运算和printf讲解
本文分为两部分。第一部分介绍了C语言中的混合运算与类型强制转换的重要性,通过实例展示了当整型数进行除法运算且结果为小数时,必须使用类型转换才能正确存储浮点数结果。第二部分详细讲解了`printf`函数的功能与使用方法,包括格式化输出不同类型数据的基本语法,并通过具体示例演示了如何利用字段宽度和对齐方式来控制输出格式,帮助读者更好地理解和掌握输出格式的控制技巧。
52 10
|
3月前
|
C语言
【C语言基础考研向】05 scanf读取标准输入超详解
本文详细解析了C语言中`scanf`函数的工作原理及常见问题。首先介绍了`scanf`如何处理标准输入,并通过示例说明了为何有时会出现阻塞现象及其解决办法。接着探讨了当输入包含多种数据类型时,特别是字符型数据的处理方式,强调了格式控制的重要性,并给出了正确的输入格式示例。通过正确配置,可以避免因空格和换行符导致的问题,确保数据准确读取。
97 10
|
3月前
|
存储 C语言
【C语言基础考研向】10 字符数组初始化及传递和scanf 读取字符串
本文介绍了C语言中字符数组的初始化方法及其在函数间传递的注意事项。字符数组初始化有两种方式:逐个字符赋值或整体初始化字符串。实际工作中常用后者,如`char c[10]=&quot;hello&quot;`。示例代码展示了如何初始化及传递字符数组,并解释了为何未正确添加结束符`\0`会导致乱码。此外,还讨论了`scanf`函数读取字符串时忽略空格和回车的特点。
100 8
|
3月前
|
C语言
C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解
本章介绍顺序结构的基本框架及C语言的标准输入输出。程序从`main()`开始依次执行,框架包括输入、计算和输出三部分。重点讲解了`printf()`与`scanf()`函数:`printf()`用于格式化输出,支持多种占位符;`scanf()`用于格式化输入,需注意普通字符与占位符的区别。此外还介绍了`putchar()`和`getchar()`函数,分别用于输出和接收单个字符。
|
4月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
186 2
|
4月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
93 1
|
4月前
|
存储 安全 编译器
C语言中的scanf函数
C语言中的scanf函数
105 1
|
C语言
【C语言】scanf/fscanf/sscanf和printf/fprintf/sprintf的详细介绍
【C语言】scanf/fscanf/sscanf和printf/fprintf/sprintf的详细介绍