C 语言 printf() 和 scanf() 的区别

2024 年 8 月 29 日 | 4 分钟阅读

引言

Printf()Scanf() 是 C 语言中内置的库函数,用于执行格式化输入格式化输出。这些函数定义在 stdio.h 头文件中。printfscanf 中的 'f' 代表 'formatted'(格式化)。因此,printf()scanf() 这两个函数都使用格式字符串中的代码来指定输出或输入值的格式。我们需要导入头文件才能使用 printf()scanf()

本文将讨论 printf() 和 scanf() 之间的区别,但在讨论区别之前,我们必须了解 printf() 和 scanf() 的语法和示例。

Printf()

它会打印双引号内的任何内容,并使用格式说明符 %c, %d, %f 等来显示变量或常量的值,还可以包含转义序列字符,例如 \n 表示换行\t 表示水平制表

语法

Scanf()

它允许我们通过键盘在控制台读取用户输入的一个或多个值。我们可以根据需要包含任意数量的格式说明符,可以带或不带格式。

语法

格式说明符字符串

printfscanf 的第一个参数中,我们传递格式字符串格式说明符字符串,并指定用户将输入值的类型。

数据类型转换格式字符串
Integer短整型%d 或 % i
短无符号% u
长有符号% ld
长无符号% lu
无符号十六进制% x
无符号八进制%O
实数float% f 或 % g
double%lf
有符号字符%c
无符号字符%c
string%s

例如,如果用户输入 20 作为输入,由于 20十进制整数值,我们在 C 语言中通过使用%d 格式说明符来指定所有十进制整数值。类似地,浮点数值使用%f 指定。

Printf() 和 Scanf() 的基本代码

示例 1

输出

Please enter the two values:8
6
The sum = 14 
sub = 2 
mul = 48

说明

在上面的程序中,我们使用 scanf() 从控制台读取输入并将其存储在变量 a 和 b 中。 之后,我们执行算术运算,如加法减法乘法,然后将结果存储在三个新变量(Sum, Sub, Mul)中。 最后,通过使用printf() 函数,我们打印结果。

示例 2:-

在上面的程序中,尽管我们传递了一个变量,但 scanf() 仍会读取两个输入,因为我们指定了两个格式说明符。请始终记住,在 scanf()/printf() 中,我们传递的所有格式说明符都应该是相同的,否则可能会遇到一些意外的运行时错误。

示例 3

输出

5
Execution finished...

说明

在上面的程序中,因为我们只指定了一个格式说明符,所以 scanf() 只从用户那里读取了一个输入。因此,从这个例子中,我们得出结论,根据格式说明符的数量,将不接受任何输入。

示例 4

输出

6
Segmentation fault

说明

在上面的程序中,我们将变量的值传递给了 scanf(),而不是变量的地址。这将导致运行时错误。在 Linux 中,我们会收到一个分段错误。

示例 5

输出

the value of a = 10, the value of b = 20

说明

在上面的程序中,当 printf 扫描格式字符串时,它会用我们传递给 printf() 的实际值替换格式说明符 (%d)。也就是说,第一个格式说明符将被替换为我们传递给 printf() 的第一个值,依此类推。

Printf() 和 Scanf() 的基本区别

printf 和 scanf 之间的一些区别是:-

  • printf() 函数将数据输出到标准输出,即控制台。相比之下,scanf() 函数从标准输入读取数据,即输入设备。
  • printf() 在少数情况下很少使用指针,但 scanf() 总是使用指针为给定变量赋值。
  • printf()scanf() 都具有相同的整数返回类型。printf() 返回其成功打印到控制台的字符数,而 scanf() 根据提供的格式说明符返回0、1 或 EOF