在C语言中,scanf()函数用于从 stdin 读取格式化输入。它返回写入其中的字符总数,否则返回负值。
用法:
int scanf(const char *characters_set)
时间复杂度:在)
辅助空间:O(n),其中 n 是输入的长度。
我们许多人都知道 scanf 的传统用法。好吧,这是一些 lesser-known 事实
如何只读取我们需要的部分输入?
例如,考虑一些仅包含字符后跟整数或浮点数的输入流。我们只需要扫描该整数或浮点数。
例子:
Input: "this is the value 100",
Output: value read is 100
Input : "this is the value 21.2",
Output : value read is 21.2
C
// C program to demonstrate that
// we can ignore some string
// in 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
现在,假设我们不知道前面的字符是什么,但我们肯定知道最后一个值是一个整数。我们如何将最后一个值扫描为整数?
仅当输入字符串没有空格时,以下解决方案才有效。例如,
输入
"blablabla 25"
C
// C program to demonstrate use of *s
#include <stdio.h>
int main()
{
int a;
scanf("%*s %d", &a);
printf("Input value read : a=%d", a);
return 0;
}
输出
Input Value read : 25
解释:scanf中的%*s用于根据需要忽略某些输入。在这种情况下,它会忽略输入,直到下一个空格或换行符。类似地,如果你写%*d,它将忽略整数,直到下一个空格或换行符。
scanf()的一般用法:
C
// C program to demonstrate general use of scanf()
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("a = %d", a);
return 0;
}
输入
2
输出
a = 2
乍一看,上述事实似乎并不是一个有用的技巧。为了理解它的用法,我们先来看看fscanf()。
C 中的 fscanf 函数
厌倦了从文件中读取所有笨拙的语法?好吧,fscanf 来救援了。该函数用于从 C 语言中的给定流中读取格式化输入。
用法:
int fscanf(FILE *ptr, const char *format, ...)
fscanf 从 FILE 指针 (ptr) 指向的文件中读取,而不是从输入流中读取。
返回值:如果不成功,它返回零或 EOF。否则,它返回成功打印的参数数量。
时间复杂度:在)
辅助空间:O(n),其中 n 是输入的长度。
示例 1:考虑以下文本文件 abc.txt
NAME AGE CITY
abc 12 hyderabad
bef 25 delhi
cce 65 bangalore
现在,我们只想读取上述文本文件的城市字段,忽略所有其他字段。 fscanf 和上面提到的技巧的组合可以轻松做到这一点
C
// C Program to demonstrate fscanf
#include <stdio.h>
// Driver Code
int main()
{
FILE* ptr = fopen("abc.txt", "r");
if (ptr == NULL) {
printf("no such file.");
return 0;
}
/* Assuming that abc.txt has content in below
format
NAME AGE CITY
abc 12 hyderabad
bef 25 delhi
cce 65 bangalore */
char buf[100];
while (fscanf(ptr, "%*s %*s %s ", buf) == 1)
printf("%s\n", buf);
return 0;
}
输出
CITY
hyderabad
delhi
bangalore
示例 2:考虑以下二进制文件program.bin
n1 n2 n3
1 5 6
2 10 11
3 15 16
4 20 21
要读取 bin 的 n1、n2 和 n3 的所有值,我们使用fscanf()
C
#include <stdio.h>
#include <stdlib.h>
struct threeNum{
int n1, n2, n3;
};
int main(){
int n;
struct threeNum num;
FILE *fptr;
if ((fptr = fopen("program.bin","rb")) == NULL){
printf("Error! opening file");
// Program exits if the file pointer returns NULL.
exit(1);
}
for(n = 1; n < 5; ++n){
fread(&num, sizeof(struct threeNum), 1, fptr);
printf("n1: %d\tn2: %d\tn3: %d", num.n1, num.n2, num.n3);
}
fclose(fptr);
return 0;
}
//Code submitted by Susobhan Akhuli
输出
n1: 1 n2: 5 n3: 6
n1: 2 n2: 10 n3: 11
n1: 3 n2: 15 n3: 16
n1: 4 n2: 20 n3: 21
让我们以表格形式看看差异:
scanf() | fscanf() | |
1. | 它用于读取标准输入。 | 该函数用于从文件中读取输入 |
2. |
它的语法是-: scanf(const char *格式,...) |
它的语法是-: fscanf(FILE *stream, const char *format, …) |
3. | 它需要格式说明符来获取特定类型的输入。 | 它以字节的形式读取流 |
4. |
它需要三个参数: 空白字符、非空白字符、格式说明符 |
它在头文件#include <stdio.h>中定义 |
相关用法
- C语言 scanf()用法及代码示例
- C语言 scanf()和gets()的区别用法及代码示例
- C语言 strchr()用法及代码示例
- C语言 strcpy()用法及代码示例
- C语言 strcat()用法及代码示例
- C语言 setlocale()用法及代码示例
- C语言 sin()用法及代码示例
- C语言 sinh()用法及代码示例
- C语言 sqrt()用法及代码示例
- C语言 signal()用法及代码示例
- C语言 setbuf()用法及代码示例
- C语言 setvbuf()用法及代码示例
- C语言 sscanf()用法及代码示例
- C语言 strtod()用法及代码示例
- C语言 strtol()用法及代码示例
- C语言 strtoul()用法及代码示例
- C语言 system()用法及代码示例
- C语言 srand()用法及代码示例
- C语言 strncat()用法及代码示例
- C语言 strcmp()用法及代码示例
- C语言 strncmp()用法及代码示例
- C语言 strcoll()用法及代码示例
- C语言 strncpy()用法及代码示例
- C语言 strerror()用法及代码示例
- C语言 strrchr()用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 scanf() and fscanf() in C。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。