Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のscanf()関数とfscanf()関数の違いと使い方を解説

scanf()関数とは

scanf()は、C言語において標準入力(stdin)から書式付きデータを読み込むための標準ライブラリ関数です。読み取りに成功した項目の数を返し、入力に失敗した場合やファイルの終端に達した場合には負の値(EOF)を返します。

C言語におけるscanf()の構文は以下のとおりです。

int scanf(const char *characters_set)

以下は、C言語でのscanf()の使用例です。

#include <stdio.h>
int main () {
    char s[20];
    printf("Enter a string : ");
    scanf("%s", s);
    printf("\nEntered string : %s\n", s);
    return(0);
}

出力

Enter a string : Peter!
Entered string : Peter!

この例では、ユーザーが入力した文字列を%s変換指定子で読み込み、そのまま画面へ出力しています。なお、%sは空白文字の手前までの1単語しか読み取らないため、空白を含む文字列を扱う際には注意が必要です。

fscanf()関数とは

fscanf()は、指定されたストリーム(ファイルなど)から書式付きデータを読み込むための関数です。基本的な動作はscanf()と同じですが、入力元が標準入力ではなく任意のストリームである点が異なります。成功した場合は読み込めた項目の数を返し、失敗した場合には0または負の値(EOF)を返します。

C言語におけるfscanf()の構文は以下のとおりです。

int fscanf(FILE *stream_name, const char *set_of_characters)

以下は、C言語でのfscanf()の使用例です。

#include <stdio.h>
#include <stdlib.h>
int main () {
    char str1[10];
    int year;
    FILE * fp;
    fp = fopen ("file.txt", "w+");
    fputs("This is demo text!", fp);
    rewind(fp);
    fscanf(fp, "%s", str1);
    printf("First word = \n%s\n", str1 );
    fclose(fp);
    return(0);
}

出力

First word =
This

このプログラムでは、まず「file.txt」を読み書きモード(w+)で開き、テキストを書き込んだ後、rewind()でファイル位置指示子を先頭に戻しています。その後、fscanf()によって最初の単語「This」だけを読み込んで表示しています。

scanf()とfscanf()の主な違い

両者の最大の違いは入力元です。scanf()は常に標準入力からデータを読み込むのに対し、fscanf()は引数で指定した任意のストリームから読み込むことができます。キーボード入力を受け付ける場合はscanf()を、ファイル内のデータを読み取る場合はfscanf()を使用するのが基本です。

  1. UEFIとは?Windows 8におけるUEFIのメリットと設定画面へのアクセス方法を解説

    本記事では、UEFIの基本概念と、Windows 8におけるこの技術の活用方法について詳しく解説します。 UEFIとは何か? UEFIは「Unified Extensible Firmware Interface(統一拡張ファームウェアインターフェース)」の略称です。この技術は従来のコンピューターのブートシステムを刷新するために設計され、旧式化したBIOSシステムに取って代わるものです。しかし、単なる旧技術の近代化ではなく、OSやコンピューターの起動技術に対する根本的に新しいアプローチと言えます。実際、UEFIはPCのBIOSシステムとはほとんど共通点がありません。 BIOSがシステム基板上の

  2. Pythonで3の倍数と7の倍数の組み合わせで数値nを作れるか判定する方法

    ある正の整数 n が与えられたとき、その n を「3の非負の倍数」と「7の非負の倍数」の合計として表すことができるかどうかを判定する問題を考えてみましょう。例えば、入力が 13 の場合、出力は True になります。なぜなら、13 = 1×7 + 2×3 と表せるからです。解法のアプローチこの問題は、次の手順で解くことができます。i を 0 から n+1 まで、7 ずつ増やしながら繰り返します。各 i について、(n − i) が 3 で割り切れるかどうかを確認します。割り切れる場合は True を返します。ループを最後まで回っても条件を満たさなかった場合は、False を返します。このアルゴ