前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C 中的 scanf() 和 fscanf() – 简单而强大

C 中的 scanf() 和 fscanf() – 简单而强大

作者头像
鲸落c
发布2022-11-14 16:42:30
9030
发布2022-11-14 16:42:30
举报
文章被收录于专栏:鲸落学习笔记鲸落学习笔记

theme: channing-cyan highlight: a11y-dark


「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

我们中的许多人都知道 scanf 的传统用途。好吧,这里有一些鲜为人知的事实

如何只读取我们需要的一部分输入?例如,考虑一些仅包含字符后跟整数或浮点数的输入流。我们只需要扫描那个整数或浮点数。

即,  输入:“这是值 100”,  输出:读取的值是 100 输入:“这是值 21.2”,  输出:读取的值是 21.2

代码语言:javascript
复制
/* C 程序来演示我们可以忽略 scanf() 中的某些字符串 */
#include <stdio.h>
int main()
{
    int a;
    scanf("This is the value %d", &amp;a);
    printf("Input value read : a = %d", a);
    return 0;
}
// Input : This is the value 100
// Output : Input value read : a = 100

现在,假设我们不知道前面的字符是什么,但我们肯定知道最后一个值是一个整数。我们如何将最后一个值扫描为整数?

以下解决方案仅在输入字符串没有空格时才有效。

代码语言:javascript
复制
/* 示例 C 程序来演示 *s 的使用 */
#include<stdio.h>
int main()
{
    int a;
    scanf("%*s %d", &amp;a);
    printf("Input value read : a=%d",a);
    return 0;
}

// Input: "blablabla 25"
// Output: Value read : 25

说明: scanf 中的 %*s 用于根据需要忽略某些输入。在这种情况下,它会忽略输入直到下一个空格或换行符。同样,如果你写 %*d 它将忽略整数,直到下一个空格或换行符。 

乍一看,上述事实似乎不是一个有用的技巧。为了理解它的用法,我们先来看看fscanf()。

fscanf(): 厌倦了从文件中读取的所有笨拙的语法?好吧, fscanf 来救援。 

代码语言:javascript
复制
int fscanf(FILE *ptr, const char *format, ...) 

fscanf 从 FILE 指针 (ptr) 指向的文件中读取,而不是从输入流中读取。

考虑以下文本文件 abc.txt 

代码语言:javascript
复制
名称 年龄 城市
美国广播公司 12 海德巴德
bef 25 德里
cce 65 班加罗尔  

现在,我们只想读取上述文本文件的城市字段,忽略所有其他字段。fscanf 和上面提到的技巧的组合可以轻松做到这一点

代码语言:javascript
复制
/*c 程序演示 fscanf 及其用法*/
#include<stdio.h>
int main()
{
    FILE* ptr = fopen("abc.txt","r");
    if (ptr==NULL)
    {
        printf("no such file.");
        return 0;
    }

    /* 假设 abc.txt 包含以下格式的内容
    姓名 年龄 城市
    abc  12 海德巴
    bef  25 德里
    cce  65 班加罗尔 */
    char buf[100];
    while (fscanf(ptr,"%*s %*s %s ",buf)==1)
        printf("%s\n", buf);

    return 0;
}

输出:

代码语言:javascript
复制
城市
海德巴
德里
班加罗尔 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档