打印
[其它应用]

C语言标准库 scanf()函数详解

[复制链接]
1203|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-4-20 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[color=var(--weui-LINK)]scanf()函数
C语言stdio.h标准库中的scanf()函数,可以用于从标准输入流stdin读取格式化的输入,比如从键盘读取。
scanf()函数语法:int scanf( const char *fmt, ...)scanf()参数
参数
描述

[color=var(--weui-LINK)]fmt
包含格式说明符的格式化字符串,主要用于解析输入流中的数据,并将读取到的值存储到下面这个参数指定的变量中
...
个数可变的参数,用于存储读取到的数据,一般格式为:&varName,其中varName通常为普通类型的变量scanf类型说明符
[color=rgba(0, 0, 0, 0.9)]编辑自网络:
类型
描述

%c
单个字符
%d
整型,一般为int
%u
无符号整型
%o
[color=var(--weui-LINK)]八进制
%x或%X
十六进制
%i
可识别正负号,及八进制和十六进制
%f
单精度浮点数
%lf
[color=var(--weui-LINK)]双精度浮点数
%s
字符串
%lf
双精度浮点数
%hd
短整型
%ld
长整型
%lld
long long整型
%e或%E
科学计数法
%g或%G
自动匹配%f或%e来表示浮点数
%[^...]
排除字符集宽度修饰符
宽度修饰符,比如%2d可以用于指定读取整数时只读取至多3个字符宽度的数据,这在读取字符串时十分有用,可以避免读取的字符数大于缓冲区的大小,导致缓冲区溢出。注意,使用宽度修饰符后,被截断保留在缓冲区内的数据可能会影响后续的读取操作,具体可参考下方的实例代码。
scanf()对应的输入提示
使用scanf()函数获取键盘上的输入的时候,可以使用空格、制表符tab键等将各个数据隔开。
scanf()返回值
如果成功,则返回成功读取和存储的个数,如果只是部分成功,则返回成功读取和存储的个数,否则将返回一个EOF(这个值一般是一个负数)。
scanf()实例代码
如下实例代码,使用scanf()函数用于从键盘上获取输入,其中获取字符串的时候,使用宽度修饰符修饰,避免缓冲区溢出:
#include "stdio.h"

int main() {
    printf("请输入一些内容,分别是整数、文字和浮点数,并使用空格隔开:");
    int intNumber;
    char str[6];
    float floatNumber;
    int num = scanf("%d %f %5s",&intNumber, &floatNumber, &str);
    //第一次运行完之后,可以尝试将&floatNumber, &str两个位置对调,然后%f %5s也对调
    //第三次编译运行之前,可以将%f改成%s,并将floatNumber类型修改为char数组
    //经过三次的编译运行,就可以很清晰地看到宽度修饰符的作用和一些使用规范了
    if(num > 0){
        printf("读取输入成功,读取到的字符串为:%s\n",str);
        printf("scanf()的返回值num为:%d\n",num);
    }else{
        printf("读取失败!");
    }
    return 0;   
}
代码编译运行,得到输出并输入:
请输入一些内容,分别是整数、文字和浮点数,并使用空格隔开:1 0.1 Hello,World
读取输入成功,读取到的字符串为:Hello
scanf()的返回值num为:3
免责声明:内容仅供参考,不保证正确性。

使用特权

评论回复
沙发
亚瑟| | 2024-4-23 14:04 | 只看该作者
这个可变参数怎么用啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1167

主题

5088

帖子

12

粉丝