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

【C言語】putw()関数とgetw()関数の使い方をわかりやすく解説


ファイルとは、レコードの集合体であり、データを永続的に保存しておくためのハードディスク上の場所のことです。C言語ではファイルを利用することで、プログラムの実行が終了しても失われないデータを扱えます。

ファイルに対する主な操作

C言語におけるファイル操作は、基本的に以下の手順で行います。

  • ファイル名を指定する(命名)
  • ファイルを開く
  • ファイルから読み込む
  • ファイルに書き込む
  • ファイルを閉じる

基本構文

まず、ファイルを扱うためのファイルポインタを宣言します。

FILE *ファイルポインタ;

宣言例:

FILE *fptr;

続いて、fopen()関数を使ってファイルを開きます。

ファイルポインタ = fopen("ファイル名", "モード");

記述例:

fptr = fopen("sample.txt", "r");
FILE *fp;
fp = fopen("sample.txt", "w");

putw()関数とgetw()関数とは

putw()関数(書き込み)

putw()関数は、int型の整数値をファイルに1つずつ書き込むために使用します。

構文:

putw(int num, FILE *fp);

使用例:

FILE *fp;
int num;
putw(num, fp);

getw()関数(読み込み)

getw()関数は、ファイルから整数値を1つずつ読み込むために使用します。

構文:

int getw(FILE *fp);

使用例:

FILE *fp;
int num;
num = getw(fp);

数値をファイルに書き込む処理

1から10までの数値をファイルに書き込むロジックは以下のとおりです。

fp = fopen("num.txt", "w");
for (i = 1; i <= 10; i++) {
    putw(i, fp);
}
fclose(fp);

ファイルから数値を読み込む処理

書き込んだ数値をファイルから読み出して表示するロジックは以下のとおりです。

fp = fopen("num.txt", "r");
printf("file content is\n");
for (i = 1; i <= 10; i++) {
    num = getw(fp);
    printf("%d\n", num);
}
fclose(fp);

サンプルプログラム

以下は、1から10までの数値をファイルに保存し、その内容を読み出して表示するCプログラムの完全な例です。

#include<stdio.h>
int main() {
    FILE *fp;
    int i, num;

    /* 数値をファイルに書き込む */
    fp = fopen("num.txt", "w");
    for (i = 1; i <= 10; i++) {
        putw(i, fp);
    }
    fclose(fp);

    /* 数値をファイルから読み込む */
    fp = fopen("num.txt", "r");
    printf("file content is\n");
    for (i = 1; i <= 10; i++) {
        num = getw(fp);
        printf("%d\n", num);
    }
    fclose(fp);

    return 0;
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます。

file content is
1
2
3
4
5
6
7
8
9
10

まとめ

putw()とgetw()を使えば、fprintf()やfscanf()のような書式付き入出力を使わなくても、整数値をシンプルにファイルへ読み書きできます。ただし、これらの関数は標準C規格には含まれておらず、処理系によって提供される拡張関数である点には注意してください。移植性を重視する場合は、fwrite()やfread()の利用も検討するとよいでしょう。

  1. 【C言語入門】ポインタと配列の関係をわかりやすく解説|スケールファクタとは

    ポインタと配列の基本的な関係 C言語では、コンパイラが配列のすべての要素に対して連続したメモリ領域を自動的に割り当てます。ここで重要になるのが「ベースアドレス」です。ベースアドレスとは、配列の先頭要素(0番目の要素)が格納されているメモリアドレスのことを指します。 例えば、次のように配列を宣言してみましょう。 int a[5] = {10, 20, 30, 40, 50}; この場合、5つの要素はメモリ上に以下のように順番に格納されます。 ここで変数「p」をint型へのポインタとして宣言すれば、次のいずれかの代入文によって、配列aの先頭アドレスをポインタに持たせることができます。 p =

  2. C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方

    Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定