在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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。