C言語-ファイル処理 |
2.1 テキストファイルの読み込み (3)
1画面分表示して停止し、リターンキーを押すと次の1画面分を表示する。[pro2-5.c]
カウントした行数が1画面の(行数 - 1)と一致したら停止するようif文で判定する処理を追加する。
表示を停止するためには、関数gets()などで入力待ちにする。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: |
#include <stdio.h> #include <stdlib.h> #define STR_MAX 256 #define SCREEN_LINE 23 /* 1画面分の行数 */ int main(void) { FILE *fp; /* ファイルポインタ用 */ char fname[80]; /* ファイル名用 */ char buff[STR_MAX]; /* 文字列用 */ char key[STR_MAX]; /* キー入力文字列用 */ int line = 0; /* 行数カウント用 */ printf("ファイル名 : "); /* プロンプト表示 */ gets(fname); /* ファイル名入力 */ if((fp = fopen(fname, "r")) == NULL){ /* ファイルオープン */ printf("ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } while(fgets(buff, STR_MAX, fp) != NULL){ ++line; /* 行数カウント */ printf("%s", buff); if(line == SCREEN_LINE){ /* 23行になったとき */ printf("--- more ---"); gets(key); /* 入力待ち */ line = 0; /* 行数カウントを0に設定 */ } } fclose(fp); /* ファイルクローズ */ return(0); } |
各行の先頭にその行の文字数を表示する。[pro2-6.c]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define STR_MAX 256 int main(void) { FILE *fp; /* ファイルポインタ用 */ char fname[80]; /* ファイル名用 */ char buff[STR_MAX]; /* 文字列用 */ int length; /* 文字列長用 */ printf("ファイル名 : "); /* プロンプト表示 */ gets(fname); /* ファイル名入力 */ if((fp = fopen(fname, "r")) == NULL){ /* ファイルオープン */ printf("ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } while(fgets(buff, STR_MAX, fp) != NULL){ length = strlen(buff); /* 文字列計算 */ printf("%d %s", length, buff); /* 表示 */ } fclose(fp); /* ファイルクローズ */ return(0); } |
ファイル名 : pro1-1.c |
test_pointer(buff, NULL);
【練習問題2-13】 pro2-6.cのプログラムを文字数が正しく表示されるように修正しなさい。
ヒント:各行の文字数が1ずつ多いのだから・・・・・
【練習問題2-14】 【練習問題2-13】にファイル全体の文字数を表示する処理を追加しなさい。
ヒント:各行の文字数をすべて加算すれば全体の文字数が得られる。
ファイル名 : pro1-1.c |
【練習問題2-15】 【練習問題2-14】を全体の行数と文字数だけ表示するように変更しなさい。
ファイル名 : pro1-1.c |
Copyright © 2001 Hiroshi Masuda |