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

发布于:2024-02-09 ⋅ 阅读:(137) ⋅ 点赞:(0)

一、问题

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

二、解答

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

格式字符 功能说明
d或,i ⽤来输⼊有符号的⼗进制整数
u ⽤来输⼊⽆符号的⼗进制整数
o ⽤来输⼊⽆符号的⼋进制整数
x,X ⽤来输⼊⽆符号的⼗六进制整数(⼤⼩写作⽤是相同的)
c ⽤来输⼊单个字符
s ⽤来输⼊字符串
f ⽤来输⼊实型,可以⽤⼩数形式或者指数形式输⼊
e,E,g,G 与f作⽤相同,e与f、g之间可以相互替换(⼤⼩写作⽤相同)
说明:
    格式字符%s的功能是⽤来输⼊字符串。其中将字符串送到⼀个字符数组中,在输⼊时以⾮空⽩
字符开始,以第⼀个空⽩字符结束。字符串以串结束标志'\0'作为最后⼀个字符。

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

#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)。例如,在本程序中,使⽤换⾏作为空⽩字符。

输出结果如下:

请输入两个整数数值:
123
456
输入的第一个整数位:123
输入的第二个整数位:456

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

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

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

#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()函数将输⼊得到的数据进⾏输出。
*/

输出结果如下

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

 三、总结

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

本文含有隐藏内容,请 开通VIP 后查看

微信公众号

今日签到

点亮在社区的每一天
去签到