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

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

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


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

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


即,


输入:“这是值 100”,


输出:读取的值是 100


输入:“这是值 21.2”,


输出:读取的值是 21.2

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


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


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

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


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

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


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

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


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

考虑以下文本文件 abc.txt


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


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


/*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;
}
复制代码


输出:

城市
海德巴
德里
班加罗尔



目录
相关文章
|
2月前
getchar()&putchar()函数
getchar()&putchar()函数。
11 1
|
9月前
scanf和getchar区别
scanf和getchar区别
129 0
|
5月前
|
C语言
文件操作(二、scanf/fscanf/sscanf​与printf/fprintf/sprintf​、fseek与ftell与rewind、feof)
文件操作(二、scanf/fscanf/sscanf​与printf/fprintf/sprintf​、fseek与ftell与rewind、feof)
|
5月前
c中scanf函数注意点
c中scanf函数注意点
30 0
|
7月前
getchar() & putchar() 函数
getchar() & putchar() 函数。
111 2
|
10月前
|
存储 Serverless C语言
printf()和scanf() (详解)
printf()和scanf() (详解)
|
10月前
|
C语言
【C语言】scanf/fscanf/sscanf和printf/fprintf/sprintf的详细介绍
【C语言】scanf/fscanf/sscanf和printf/fprintf/sprintf的详细介绍
|
11月前
|
C语言
论Scanf、Gets、Getchar的区别
论Scanf、Gets、Getchar的区别
110 0
|
11月前
|
数据安全/隐私保护
getchar()与putchar()函数详解
getchar与putchar其实最基本的作用就是用getchar读取一个字符,再用putchar输出一个字符
125 0
当后面有 fgets()/gets()/scanf() 时 scanf() 出现问题
首先让我们来考虑下面用 C 编写的简单程序。该程序使用 scanf() 读取一个整数,然后使用 fgets() 读取一个字符串。
38 0