當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 scanf() and fscanf()用法及代碼示例


在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>中定義



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 scanf() and fscanf() in C。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。