C言語でファイルに文字を出力し、逆順に表示する方法【サンプルコード付き】
はじめに
C言語では、ユーザーが入力した内容をファイルへ書き出すプログラムを簡単に作成できます。本記事では、次の2つの処理を行うプログラムを紹介します。
- ファイルに入力された文字数をカウントして表示する
- ファイルに入力された文字列を逆順に出力する
ファイルへの書き込みの基本
まず、fopen() でファイルを書き込みモード("w")で開き、入力された文字を1文字ずつ保存します。データ入力の終了は、Windows環境では Ctrl+Z を押します。
while ((ch = getchar()) != EOF) {
fputc(ch, fp);
}
getchar() で標準入力から1文字ずつ読み込み、EOF(End Of File)が検出されるまでループを繰り返しながら、fputc() でファイルポインタ fp が指すファイルへ書き込んでいます。
ftell・rewind・fseek による逆順表示
すでにファイルへ書き込んだ内容を逆順に表示するには、次の3つの関数を組み合わせます。
- ftell():現在のファイル位置(ファイル先頭からのバイト数)を取得する
- rewind():ファイル位置指示子をファイルの先頭に戻す
- fseek():ファイル位置指示子を任意の位置へ移動させる
特に fseek(fp, -i, SEEK_END) を使うと「ファイル末尾から i バイト前」の位置に移動できるため、末尾の文字から順に1文字ずつ読み出せば、内容を逆順に表示できます。
サンプルプログラム
以下は、ファイルに文字を書き込み、入力された文字数を表示した後、その内容を逆順に出力するCプログラムの完全なコードです。
#include<stdio.h>
int main(void) {
FILE *fp;
char ch;
int n, i = 0;
/* 書き込みモードでファイルを開く */
fp = fopen("reverse.txt", "w");
printf("テキストを入力してください(終了はCtrl+Z)\n");
/* 入力をファイルへ書き込む */
while ((ch = getchar()) != EOF) {
fputc(ch, fp);
}
/* 入力された文字数を取得 */
n = ftell(fp);
printf("入力された文字数 = %d\n", n);
/* ファイル位置を先頭へ戻す */
rewind(fp);
n = ftell(fp);
printf("rewind後のファイル位置 = %d\n", n);
fclose(fp);
/* 読み込みモードで再オープン */
fp = fopen("reverse.txt", "r");
fseek(fp, 0, SEEK_END); /* ファイル末尾へ移動 */
n = ftell(fp); /* ファイルサイズを取得 */
/* 末尾から1文字ずつ読み出して逆順表示 */
printf("逆順の内容:\n");
while (i < n) {
i++;
fseek(fp, -i, SEEK_END);
printf("%c", fgetc(fp));
}
fclose(fp);
return 0;
}
実行結果
上記のプログラムを実行すると、次のような結果が出力されます。
テキストを入力してください(終了はCtrl+Z) TutorialsPoint ^Z 入力された文字数 = 18 rewind後のファイル位置 = 0 逆順の内容: tnioPslairotuT
ポイントと注意点
- rewind() の効果確認:rewind() 実行後に ftell() を呼ぶと「0」が返るため、ファイル位置が先頭に戻ったことがわかります。
- SEEK_END の活用:
fseek(fp, -i, SEEK_END)により、末尾から i 番目の文字へ直接アクセスでき、これが逆順表示の核心部分です。 - 型に関する補足:厳密には、
getchar()の戻り値と EOF を比較する際は、変数chをint型で宣言するのが安全です。char型では EOF(通常は -1)を正しく扱えない環境があるためです。
このように、標準入出力関数とファイル操作関数を組み合わせることで、文字数のカウントや逆順表示といったテキスト処理を手軽に実装できます。
-
Pythonで画面に出力するには?print文の基本と使い方を解説
Pythonで画面(標準出力)に文字や値を表示する最も基本的な方法は、print文を使うことです。>>> print Hello, world Hello, worldカンマ区切りで複数の項目を出力する同じ行に複数の項目をスペースで区切って表示したい場合は、項目の間をカンマで区切ります。>>> print Hello,, World Hello, Worldこの例では、どちらの文字列にもスペースは含まれていませんが、2つのオブジェクトの間にあるカンマによって、print文が自動的にスペースを挿入してくれます。さまざまなデータ型の出力print文は文字列だけで
-
【findコマンド徹底解説】Linuxでファイルやディレクトリを柔軟に検索する方法
Linuxのfindコマンドは、Linuxシステムにおいて最も重要かつ便利なコマンドの一つです。その名の通り、自分で設定したさまざまな条件や変数に基づいて、Linuxマシン上のファイルを検索できます。パーミッション、ユーザー、グループ、ファイルタイプ、日付、サイズなど、多彩な条件を組み合わせて目的のファイルを見つけられるのが特徴です。この記事では、findコマンドを使ってLinux上でファイルを検索する方法を詳しく解説します。 findコマンドはほとんどのLinuxディストリビューションにデフォルトで搭載されているため、追加でパッケージをインストールする必要はありません。 カレントディレクト