Peter.txt全体を表示してみよう。
必要なことを考えてみよう。
(1)ファイルの終わりまで作業するのでwhileループを使う。
(2) 関数fgetc()はファイルの終わりに達して,それ以上読み込めなくなるとEOFを返してくる
(3)文字番号は3桁になるので,書式では「%3d」を使う。
(4)表示できる文字だけ表示し,それ以外(\nなど)は「.」を表示する。
(5)表示できるかどうかを判定するために関数isprint()(#include <ctype.h>が必要)を使う。
Peter.txt全体を表示するプログラム |
#include <stdio.h> #include <stdlib.h> #include <ctype.h> /* isprint()のため */ int main() { FILE *fp; char fname[]="Peter.txt"; int ch; /*読み込まれた文字(文字コード)*/ int i; /*ファイルオープンの手続き*/ fp=fopen(fname,"r"); if (fp==NULL) { printf("can't open %s\n",fname); exit(1); } i=0; ch=fgetc(fp); while (ch!=EOF) { /*ファイル終端文字でなかったら*/ if (isprint(ch)) { /*表示できる文字コードだったら*/ printf("%3d文字目 [%c(%3d %02xH)]\n",i,ch,ch,ch); } else { /*そうでなかったら*/ printf("%3d文字目 [.(%3d %02xH)]\n",i,ch,ch); } ch=fgetc(fp); i++; } /*ファイルクローズ*/ fclose(fp); return 0; } |
実行結果 |
0文字目 [P( 80 50H)] 1文字目 [e(101 65H)] 2文字目 [t(116 74H)] 3文字目 [e(101 65H)] 4文字目 [r(114 72H)] 5文字目 [ ( 32 20H)] 6文字目 [r(114 72H)] 7文字目 [a( 97 61H)] 8文字目 [n(110 6eH)] 9文字目 [ ( 32 20H)] 10文字目 [s(115 73H)] 11文字目 [t(116 74H)] 12文字目 [r(114 72H)] 13文字目 [a( 97 61H)] 14文字目 [i(105 69H)] 15文字目 [g(103 67H)] 16文字目 [h(104 68H)] 17文字目 [t(116 74H)] 18文字目 [ ( 32 20H)] 19文字目 [a( 97 61H)] 20文字目 [w(119 77H)] 21文字目 [a( 97 61H)] 22文字目 [y(121 79H)] 23文字目 [ ( 32 20H)] 24文字目 [t(116 74H)] 25文字目 [o(111 6fH)] 26文字目 [ ( 32 20H)] 27文字目 [M( 77 4dH)] 28文字目 [r(114 72H)] 29文字目 [.( 46 2eH)] 30文字目 [ ( 32 20H)] 31文字目 [M( 77 4dH)] 32文字目 [c( 99 63H)] 33文字目 [G( 71 47H)] 34文字目 [r(114 72H)] 35文字目 [e(101 65H)] 36文字目 [g(103 67H)] 37文字目 [o(111 6fH)] 38文字目 [r(114 72H)] 39文字目 ['( 39 27H)] 40文字目 [s(115 73H)] 41文字目 [ ( 32 20H)] 42文字目 [g(103 67H)] 43文字目 [a( 97 61H)] 44文字目 [r(114 72H)] 45文字目 [d(100 64H)] 46文字目 [e(101 65H)] 47文字目 [n(110 6eH)] 48文字目 [,( 44 2cH)] 49文字目 [.( 10 0aH)] 50文字目 [a( 97 61H)] 51文字目 [n(110 6eH)] 52文字目 [d(100 64H)] 53文字目 [ ( 32 20H)] 54文字目 [s(115 73H)] 55文字目 [q(113 71H)] 56文字目 [u(117 75H)] 57文字目 [e(101 65H)] 58文字目 [e(101 65H)] 59文字目 [z(122 7aH)] 60文字目 [e(101 65H)] 61文字目 [d(100 64H)] 62文字目 [ ( 32 20H)] 63文字目 [u(117 75H)] 64文字目 [n(110 6eH)] 65文字目 [d(100 64H)] 66文字目 [e(101 65H)] 67文字目 [r(114 72H)] 68文字目 [ ( 32 20H)] 69文字目 [t(116 74H)] 70文字目 [h(104 68H)] 71文字目 [e(101 65H)] 72文字目 [ ( 32 20H)] 73文字目 [g(103 67H)] 74文字目 [a( 97 61H)] 75文字目 [t(116 74H)] 76文字目 [e(101 65H)] 77文字目 [!( 33 21H)] 78文字目 [.( 10 0aH)] 79文字目 [F( 70 46H)] 80文字目 [i(105 69H)] 81文字目 [r(114 72H)] 82文字目 [s(115 73H)] 83文字目 [t(116 74H)] 84文字目 [ ( 32 20H)] 85文字目 [h(104 68H)] 86文字目 [e(101 65H)] 87文字目 [ ( 32 20H)] 88文字目 [a( 97 61H)] 89文字目 [t(116 74H)] 90文字目 [e(101 65H)] 91文字目 [ ( 32 20H)] 92文字目 [s(115 73H)] 93文字目 [o(111 6fH)] 94文字目 [m(109 6dH)] 95文字目 [e(101 65H)] 96文字目 [ ( 32 20H)] 97文字目 [F( 70 46H)] 98文字目 [r(114 72H)] 99文字目 [e(101 65H)] 100文字目 [n(110 6eH)] 101文字目 [c( 99 63H)] 102文字目 [h(104 68H)] 103文字目 [ ( 32 20H)] 104文字目 [b( 98 62H)] 105文字目 [e(101 65H)] 106文字目 [a( 97 61H)] 107文字目 [n(110 6eH)] 108文字目 [s(115 73H)] 109文字目 [;( 59 3bH)] 110文字目 [.( 10 0aH)] 111文字目 [a( 97 61H)] 112文字目 [n(110 6eH)] 113文字目 [d(100 64H)] 114文字目 [ ( 32 20H)] 115文字目 [t(116 74H)] 116文字目 [h(104 68H)] 117文字目 [e(101 65H)] 118文字目 [n(110 6eH)] 119文字目 [ ( 32 20H)] 120文字目 [h(104 68H)] 121文字目 [e(101 65H)] 122文字目 [ ( 32 20H)] 123文字目 [a( 97 61H)] 124文字目 [t(116 74H)] 125文字目 [e(101 65H)] 126文字目 [ ( 32 20H)] 127文字目 [s(115 73H)] 128文字目 [o(111 6fH)] 129文字目 [m(109 6dH)] 130文字目 [e(101 65H)] 131文字目 [ ( 32 20H)] 132文字目 [r(114 72H)] 133文字目 [a( 97 61H)] 134文字目 [d(100 64H)] 135文字目 [i(105 69H)] 136文字目 [s(115 73H)] 137文字目 [h(104 68H)] 138文字目 [e(101 65H)] 139文字目 [s(115 73H)] 140文字目 [.( 46 2eH)] 141文字目 [.( 10 0aH)] |
改行文字'\n'(10あるいは0xa)があるのがわかる。