http://www.sw.it.aoyama.ac.jp/2015/CP1/lecture12.html
© 2005-15 Martin J. Dürst 青山学院大学
11A1 | 11B2 | 11C1 | 11C2 | |
100点 | 91 | 84 | 50 | 25 |
60点 | 2 | 9 | 42 | 52 |
部分点 | - | - | - | 13 |
エラー | - | - | 1 | 2 |
未提出 | 1 | 1 | 1 | 2 |
[昨年度資料につき削除]
機能 | 標準入力 (stdin ) |
任意のファイル FILE * f |
---|---|---|
準備 | (不要) | f = fopen(name,"r") |
一文字入力 | getchar() |
getc(f) 又は
fgetc(f) |
一行入力 | gets(s)
fgets(s,l,stdin) |
fgets(s,l,f) |
書式つき入力 | scanf(format,...) %s |
fscanf(f,format,...) %s |
後片付け | (不要) | fclose(f) |
機能 | 標準出力 (stdout ) |
任意のファイル FILE *
f
|
---|---|---|
準備 | (不要) | f = fopen(name,"w") |
一文字出力 | putchar(c) |
putc(c,f) 又は
fputc(c,f) |
一行出力 | puts(s) |
fputs(s,f) |
書式つき出力 | printf(format,...) |
fprintf(f,format,...) |
後片付け | (不要) | fclose(f) |
fflush(f)
: 出力・出力のバッファを空にするprintf
後に大事)sprintf(s,format,...)
:
文字列への書式付き「出力」sscanf(s,format,...)
:
文字列からの書式付き「入力」stderr
stdin
, stdout
と同様に stderr
ファイルが常に用意stderr
への出力にはファイル出力の関数が必要malloc
などの定石でも本来、エラー出力を使用if (!(file=fopen("myfile.txt","w"))) {
fprintf (stderr, "Cannot open file myfile.txt for writing.\n");
exit(1);
}
文字 | 青 | 山 | A | o | y | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Shift_JIS |
8E | 52 | 90 | C2 | 41 | 6F | 79 | |||||
UTF-8 |
E9 | 9D | 92 | E5 | B1 | B1 | 41 | 6F | 79 | |||
UTF-16 (BE) |
97 | 52 | 5C | 71 | 00 | 41 | 00 | 6F | 00 | 79 |
iso-2022-jp
、電子メールなど)Shift_JIS
、Windows PC, MacIntosh)CP932
は SJIS の変形)EUC-JP
、Unix 系)世界的な文字集合: Unicode/ISO 10646/JIS X 0221/...
ユニコードの符号化:
UTF-8
: US-ASCII と互換性が非常に高いUTF-16
: 殆どの文字が16ビットで表現UTF-32
: 全ての文字が32ビットを使用gcc
での文字コード指定:
-finput-charset=文字コード
:
ソースの文字コード-fexec-charset=文字コード
:
実行時の文字コード表示に使用される文字コード:
Shift_JIS
系)fopen
には "rb"
, "wb"
,
"r+b"
等を使う (参考書 p. 318)fseek
関数で変更可能fwrite
関数で書き、fread
関数で読むテキスト | バイナリ | |
---|---|---|
整数 | 十進数に変更 (数値の大きさによって桁数が違う) |
そのまま |
文字列 | '\0' まで |
決まった長さ (ゴミを含む可能性) |
例: fwrite.c
テキストファイル:
cat file.txt
で画面に表示バイナリファイル:
od -hc raw.bin
又は hexdump file.bin
で画面に表示fread
関数と fwrite
関数void *
のプログラム内の書き出したい、読み込みたい場所size_t
(普通は int
) の要素
(レコード、構造体) 1 個の大きさ (バイト)size_t
のレコードの数FILE*
のファイルポインタfseek
または
fflush
が必要fwrite (students, sizeof(Student), studentCount,
rawFile);
fseek
関数FILE*
のファイルポインタlong
のゲタ (バイト)int
の種類:
SEEK_SET
: ゲタはファイルの頭からSEEK_CUR
: ゲタは現在位置から
(負も可)SEEK_END
: ゲタはファイルの末尾から (0
か負)0
、そうでない場合に
EOF