C言語であるファイルの内容を別のファイルにコピーするプログラム
ファイルとは、レコード(データ)の集まりであり、ハードディスク上にデータを永続的に保存するための場所です。C言語のコマンドを使うことで、さまざまな方法でファイルにアクセスすることができます。
ファイルに対して行える操作
C言語では、ファイルに対して以下のような操作を行うことができます。
- ファイルに名前を付ける
- ファイルを開く
- ファイルから読み込む
- ファイルへ書き込む
- ファイルを閉じる
基本構文
ファイルポインタの宣言とファイルを開くための構文は以下のとおりです。
FILE *File pointer;
記述例: FILE *fptr;
File pointer = fopen("ファイル名", "モード");
記述例: fptr = fopen("sample.txt", "r");
FILE *fp;
fp = fopen("sample.txt", "w");
ファイルから読み込むための構文は以下のとおりです。
int fgetc( FILE *fp ); // ファイルから1文字を読み込む
ファイルへ書き込むための構文は以下のとおりです。
int fputc( int c, FILE *fp ); // ストリームに1文字ずつ書き込む
これらの関数を組み合わせることで、1つのファイルの内容を別のファイルへコピーすることが可能になります。
サンプルプログラム
以下は、あるファイルの内容を別のファイルにコピーするC言語のプログラムです。
#include <stdio.h>
#include <stdlib.h> // exit() を使用するために必要
int main(){
FILE *fptr1, *fptr2;
char filename[100], c;
printf("読み込み用のファイル名を入力してください \n");
scanf("%s",filename);
// 1つ目のファイルを読み込みモードで開く
fptr1 = fopen(filename, "r");
if (fptr1 == NULL){
printf("ファイル %s を開けません \n", filename);
exit(0);
}
printf("書き込み用のファイル名を入力してください \n");
scanf("%s", filename);
// 2つ目のファイルを書き込みモードで開く
fptr2 = fopen(filename, "w");
if (fptr2 == NULL){
printf("ファイル %s を開けません \n", filename);
exit(0);
}
// ファイルの内容を読み取りながらコピー
c = fgetc(fptr1);
while (c != EOF){
fputc(c, fptr2);
c = fgetc(fptr1);
}
printf("\n内容を %s にコピーしました", filename);
fclose(fptr1);
fclose(fptr2);
return 0;
}
実行結果
上記のプログラムを実行すると、次のような出力が得られます。
読み込み用のファイル名を入力してください file3.txt 書き込み用のファイル名を入力してください file1.txt 内容を file1.txt にコピーしました
-
C言語で連結リストの末尾からn番目のノードを取得するプログラム
n個のノードからなる連結リストが与えられたとき、その末尾からn番目のノードを出力するのが本記事の目的です。プログラムはリスト内のノードの並び順を変更してはならず、あくまで末尾から数えてn番目に位置するノードの値を表示するだけでなければなりません。具体例入力 -: 10 20 30 40 50 60 N = 3 出力 -: 40上記の例では、先頭ノードから順に「count − n」個目までのノード(10, 20, 30, 40, 50, 60)を走査し、末尾から3番目のノードとして 40 が得られます。効率的なアプローチリスト全体を最後まで走査しなくても、以下の手順で目的のノードを見つけられ
-
円に内接する正十角形の面積を求めるC++プログラム
この記事では、円の内部に内接する正十角形(デカゴン)の面積を求める方法について解説します。円の半径 r が与えられており、正十角形の一辺の長さを a とします。 円に内接する正十角形の場合、中心における隣り合う頂点同士がなす角(中心角)は 360° ÷ 10 = 36° となります。この性質を利用すると、一辺の長さ a は半径 r を用いて次のように表すことができます。 さらに、一辺の長さと中心角の関係から、円に内接する正十角形の面積は次の式で求められます。 サンプルコード 以下は C++ による実装例です。半径を受け取って面積を返す area() 関数を定義しています。半径が負の値の場