栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言格式化输入函数scanf和sscanf的用法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言格式化输入函数scanf和sscanf的用法

scanf和sscanf是C语言中常用的格式化输入函数。常用于从标准输入或者字符串中,按照一定的格式,将输入赋值给变量。
int scanf(const char *format, ...)
int sscanf(const char *str, const char *format, ...)

除了常用的获取整型、字符串等数据外,还有以下三种用法比较实用:

一、读取多个变量 1.通常情况

当读取多个变量是,在format参数里通常使用一个或多个空格、回车、制表符进行分割。

2.使用其它字符分割多个变量

当然也可以用其它的字符进行分割,比如’,'逗号。但是用其它的字符分割的话,在标准输入端输入的时候就需要出现相同的字符对数据进行分割。比如下面的代码:

int main()
{
    int a,b;
    scanf("%d,%d",&a,&b);
    printf("a=%d,b=%dn",a,b);
    return 0;
}

那么在输入的时候就需要用逗号分割两个输入的数字,如输入"12,34",这样变量a和b才能够正确的。

如果使用上面代码,但是不用逗号分割两个输入的数字,那么就会出现读取错误,如下图所示。

注意:如果要读取字符串,那么不要用逗号进行分割,因为输入的逗号会被读取走,从而导致分割失败,如下面的代码:

int main()
{
    int a,b;
    char buf1[20],buf2[20];
    scanf("%s,%s",buf1,buf2);
    printf("a=%s,b=%sn",buf1,buf2);
    return 0;
}

当读取输入时,会发现逗号没有起到分割的作用,见下图。第二个字符数组没有被赋值。

所以在读取多个变量的时候,尽量用空格、回车、制表符进行分割。

二、星号*的用法

在读取多个变量的时候,当输入中的一部分需要跳过,不用赋值给变量的时候,可以使用"*"星号。
如下面代码:

int main()
{
    int a,b;
    scanf("%d %*d %d",&a,&b);
    printf("a=%d,b=%dn",a,b);
    return 0;
}

当我们输入3个数字,只想取第一个和第三个进行赋值时,就可以对第2个用星号* 。可以看到下面的输入,中间的34就没有被赋值,而是跳过了。

三、中括号[]的用法

中括号的作用是匹配一个字符集合,有两种用法:

1. 对多个字符进行匹配,如"%[0-9]" 或者 “%[abc]”

见如下代码,其匹配三个变量,分别是数字、字母和符号。

int main()
{
    char buf1[20],buf2[20],buf3[20];
    scanf("%[0-9]%[a-z]%[,.?]",buf1,buf2,buf3);
    printf("buf1=%snbuf2=%snbuf3=%sn",buf1,buf2,buf3);
    return 0;
}

当输入"123abcd?,1234"时,输出结果如下

2. 直到某个字符停止匹配,如"%[^a]"

在中括号中的’'符号,表示配置字符,直到之后的字符出现,比如下面的代码:

int main()
{
    int a;
    char buf1[20];
    scanf("%[^,],%d",buf1,&a);
    printf("buf1=%sna=%dn",buf1,a);
    return 0;
}

%[^,]的意思是读取字符直到遇到’,'逗号,例如输入"123abc123,89"是,"123abc123"将放入buf1数组中,而逗号后面的"89"将赋值给变量a。见下图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879290.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号