C语言scanf()函数的格式字符是什么?

一、问题

我们知道 printf()函数格式字符(以下简称格式符)等问题,那么与之对应的 scanf()函数的格式符是什么样的呢?

二、解答

⾸先对 scanf()函数的格式符作⼀介绍

|---------|-------------------------------|
| 格式字符 | 功能说明 |
| d或,i | ⽤来输⼊有符号的⼗进制整数 |
| u | ⽤来输⼊⽆符号的⼗进制整数 |
| o | ⽤来输⼊⽆符号的⼋进制整数 |
| x,X | ⽤来输⼊⽆符号的⼗六进制整数(⼤⼩写作⽤是相同的) |
| c | ⽤来输⼊单个字符 |
| s | ⽤来输⼊字符串 |
| f | ⽤来输⼊实型,可以⽤⼩数形式或者指数形式输⼊ |
| e,E,g,G | 与f作⽤相同,e与f、g之间可以相互替换(⼤⼩写作⽤相同) |

cpp 复制代码
说明:
    格式字符%s的功能是⽤来输⼊字符串。其中将字符串送到⼀个字符数组中,在输⼊时以⾮空⽩
字符开始,以第⼀个空⽩字符结束。字符串以串结束标志'\0'作为最后⼀个字符。

在下⾯的例⼦中,将使⽤格式输⼊函数 scanf()得到⽤户输⼊的两个整型数据(因为scanf()函数只能⽤来进⾏输⼊操作,所以在屏幕上显示信息时使⽤显示函数)。

cpp 复制代码
#include <stdio.h>
int main()
{
    int i, j;
    printf("请输入两个整数数值:\n");
    scanf("%d%d", &i, &j);
    printf("输入的第一个整数位:%d\n", i);
    printf("输入的第二个整数位:%d\n", j);
    return 0;
}

/*
    (1)为了能接收⽤户输⼊的整型数据,在上述代码中定义了两个整型变量 i 和 j。

    (2)因为 scanf()函数只能接收⽤户输⼊的数据,⽽不能显⽰信息,因此先使⽤ printf() 函数
输出⼀段字符表⽰提⽰信息。printf()函数在输出字符串之后会⾃动进⾏换⾏,这样就省去使⽤换⾏符。

    (3)调⽤ scanf()函数。在其参数中可以看到,在格式控制的位置使⽤双引号将格式 字符括住
(%d 表⽰输⼊的为⼗进制的整数);在地址列表位置,使⽤&符号表⽰变量的地址。

    (4)此时变量 i 和 j 已经得到了⽤户输⼊的数据,调⽤ printf()函数将变量进 ⾏输出。这⾥
要注意的是,printf()函数使⽤的是变量的标识符,⽽不是变量的地址:scant() 函数使⽤的是变量
的地址,⽽不是变量的标识符。

*/

说明:

程序是怎样将输⼊的内容分别保存到指定的两个变量中的呢?原来,scanf() 函数使⽤空⽩字符来分隔输⼊的数据。这些空⽩字符包括空格、换⾏、制表符(Tab)。例如,在本程序中,使⽤换⾏作为空⽩字符。

输出结果如下:

cpp 复制代码
请输入两个整数数值:
123
456
输入的第一个整数位:123
输入的第二个整数位:456

在 printf()函数中,除了有格式字符外,还有附加格式⽤于进⾏更为具体的说明。相对应地,scanf()函数中也有附加格式⽤于进⾏更为具体的格式说明

|-------|----------------------------------------------------|
| 字符 | 功能说明 |
| l | ⽤于输⼊长整型数据(可⽤于%ld,%lo, %x,%lu)以及double型的数据(%lf或%le) |
| h | ⽤于输⼊短整型数据(可⽤于%hd, %ho, %hx) |
| n(整数) | 指定输⼊数据所占宽度 |
| * | 表示指定的输⼊项在读⼊后不赋给相应的变量 |

下⾯使⽤附加格式说明 scanf()函数的格式输⼊,并对⽐输⼊前后的结果,观察其附加格式的效果。

cpp 复制代码
#include <stdio.h>

int main()
{
    long i;
    short j;
    int num1 = 1;
    int num2 = 2;
    char c[10];
    printf("请输⼊⼀个长整型变量数值:\n");
    scanf("%ld", &i);
    printf("请输⼊⼀个短整型数值:\n");
    scanf("%hd", &j);
    printf("请输⼊⼀个整数:\n");
    scanf("%d*%d", &num1, &num2);
    printf("请输⼊⼀个字符串,但是输出时只能显示前三个字符:\n");
    scanf("%3s", c);
    printf("⻓整型的数值为:%ld\n", i);
    printf("短整型的数值为:%hd\n", j);
    printf("整型数值1为:%d\n", num1);
    printf("整型数值2为:%d\n", num2);
    printf("输出字符串的前三位:%s\n", c);
    return 0;
}

/*
    (1)为了使程序中的 scanf()函数能接收数据,要在程序代码中定义所使⽤的变量。为了演示
不同格式说明的情况,定义变量的类型有长整型、短整型和字符数组。

    (2)使⽤ printf()函数显示⼀串字符,提示输⼊的数据为⻓整型,调⽤ scanf()函数使变量
 long 得到⽤户输⼊的数据。在 scanf()函数的格式控制部分,使⽤附加格式字符1表⽰长整型。

    (3)再使⽤ printf()函数显⽰提⽰信息,提⽰输⼊的数据为短整型。调⽤ scanf0函数时,使
⽤附加格式字符h表⽰短整型。

    (4)使⽤格式字符*的作⽤是表⽰指定的输⼊项在读⼊后不赋给相应的变量。在代码中分析这句话
的含义就是:第⼀个%d 是输⼊ num1 变量,第⼆个%d 是输⼊ num2 变量,但是在第⼆个%d 前有⼀
个*附加格式说明字符,这样第⼆个输⼊的值被忽略,也就 是说 num2 变量不保存相应输⼊的值。

    (5)%s 是⽤来表⽰字符串的格式字符,将⼀个数n(整数)放⼊%s 中间,这样就指定了数据的
宽度。在程序中,scanf()函数中指定的数据宽度为 3,那么在输⼊⼀个字符时,只是接收前3个字符。

    (6)最后利⽤ printf()函数将输⼊得到的数据进⾏输出。
*/

输出结果如下

cpp 复制代码
请输⼊⼀个长整型变量数值:
123456789
请输⼊⼀个短整型数值:
60
请输⼊⼀个整数:
9
请输⼊⼀个字符串,但是输出时只能显示前三个字符:
hello
⻓整型的数值为:123456789
短整型的数值为:60
整型数值1为:9
整型数值2为:2
输出字符串的前三位:hel

三、总结

⼀个 scanf()函数也可以输⼊多个数据,多个连续的 scanf()函数同时输⼊数据的时候和⼀个 scanf()函数的调⽤效果相同,在使⽤时最好在每个输⼊格式符之间加上空格区分。

相关推荐
代码雕刻家2 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
吾爱星辰3 小时前
Kotlin 处理字符串和正则表达式(二十一)
java·开发语言·jvm·正则表达式·kotlin
ChinaDragonDreamer3 小时前
Kotlin:2.0.20 的新特性
android·开发语言·kotlin
IT良3 小时前
c#增删改查 (数据操作的基础)
开发语言·c#
Kalika0-04 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch4 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
代码雕刻家4 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
一个闪现必杀技4 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
Fan_web4 小时前
jQuery——事件委托
开发语言·前端·javascript·css·jquery
龙图:会赢的4 小时前
[C语言]--编译和链接
c语言·开发语言