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

【C言語】テキストファイルの行数を数えるプログラムの作り方

この記事では、C言語を使ってテキストファイル内の総行数を取得する方法を解説します。

このプログラムは、指定したファイルを開き、内容を1文字ずつ読み込みながら、改行文字(\n)の出現回数をカウントすることで、ファイル全体の行数を求めます。

入力:
ファイル「test.txt」
  Hello friends, how are you?
  This is a sample file to get line numbers from the file.

出力:
行数の合計:2

仕組みの解説

プログラムの処理の流れは以下の通りです。

まず fopen() で対象ファイルを読み込みモード("r")で開きます。続いて fgetc() を使ってファイルの内容を1文字ずつ読み進め、読み取った文字が改行コード('\n')と一致するたびにカウンターを1増やします。ファイルの終端(EOF)に到達したらループを終了し、fclose() でファイルを閉じた後、カウントした行数を出力して完了です。

注意点

この方法は改行文字の個数を行数として数えているため、最終行に改行コードが存在しない場合、その行はカウントされません。より正確な行数が必要な場合は、ファイル末尾の判定処理を追加するとよいでしょう。

サンプルコード

#include<iostream>
using namespace std;
#define FILENAME "test.txt"
int main() {
    FILE *fp;
    char ch;
    int linesCount=0;
    // ファイルを読み込みモードで開く
    fp=fopen(FILENAME,"r");
    if(fp==NULL) {
        printf("File \"%s\" does not exist!!!\n",FILENAME);
        return -1;
    }
    // 1文字ずつ読み込み、改行文字をチェック
    while((ch=fgetc(fp))!=EOF) {
        if(ch=='\n')
            linesCount++;
    }
    // ファイルを閉じる
    fclose(fp);
    // 行数を出力
    printf("Total number of lines are: %d\n",linesCount);
    return 0;
}

コードのポイント

  • #define FILENAME: 対象となるファイル名をマクロ定義しておくことで、変更が容易になります。
  • NULLチェック: fopen() の戻り値が NULL の場合はファイルが存在しないため、エラーメッセージを表示して終了します。
  • fgetc() による読み込み: 1文字単位で読み込むことで、大きなファイルでも確実に改行を検出できます。
  1. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*

  2. Pythonで行列内の「完全に囲まれた島」の数を数える方法を解説

    問題の概要0と1のみで構成された2次元のバイナリ行列を考えます。ここで「1」は陸地、「0」は水を表します。島とは、隣り合った1の集まりであり、その周囲がすべて水で囲まれている領域のことです。本記事では、行列の中から端(境界)に一切接しておらず、完全に水で囲まれた島の数を数えるプログラムをPythonで実装する方法を解説します。例として、次のような入力が与えられた場合を考えてみましょう。この場合の出力は 2 となります。島は全部で3つ存在しますが、そのうち2つだけが完全に水で囲まれているためです。解法のアプローチ:DFS(深さ優先探索)この問題は、DFS(深さ優先探索)を用いることで効率的に解く