http://www.sw.it.aoyama.ac.jp/2014/CP1/lecture4.html
© 2005-13 Martin J. Dürst 青山学院大学
partial
: 19)(学生番号の解析)
行数 | バイト数 | |
一番長い答案 | 252 | 8139 |
一番短い答案 | 43 | 1167 |
問題点:
数物理 | 化学 | 電気 | 機械 | 経シス | 情テク | ... | |
19xx | |||||||
20xx |
char
型の配列 (byte
array)char
型は文字も小さい数字も扱える'\0'
(ナル文字) で表現char str[] = "Aoyama\n";
str[0] |
str[1] |
str[2] |
str[3] |
str[4] |
str[5] |
str[6] |
str[7] |
|
文字 | A | o | y | a | m | a | \n | \0 |
数字 (10進数) | 65 | 111 | 121 | 97 | 109 | 97 | 10 | 0 |
数字 (16進数) | 0x41 | 0x6F | 0x79 | 0x61 | 0x6D | 0x61 | 0x0A | 0x00 |
(main input/output functions)
入力 | 出力 | |
一文字 | getchar() |
putchar(char c) |
一行 | gets(char* buffer) fgets(char*, int, stdin) |
puts(char* string) |
フォーマット付き | scanf(char* format,...) ( ) |
printf(char* format,...) |
man
コマンドgetchar
: 文字 (の番号) 又は EOF
(end of
file, ファイルの終わり)putchar
: 出力した文字またはエラーの場合
EOF
fgets
:
バッファ又は何も読んでない場合、NULL
puts
: 負でない整数または EOF
scanf
: 読み込みに成功した変数の数または
EOF
printf
: 出力した文字の数具体例:
while ((c = getchar()) != EOF) { ... }
(buffer overflow)
C 言語のメモリの扱い:
Segmentation Fault
などのエラー)int array[10]; array[20] =
100;
gets
の問題点多くの教科書・参考書ではまだ使用中
入力の長さは予想不可能
バッファの長さが足りないと他の変数などが勝手に書き換えられる
gets
は禁止
(演習問題 04B2 参照)
scanf
の要点例: scanf ("%lf", &doubleVar);
場合によって printf
と少し書き方が違う。
%s
は gets
と同様に大問題 (演習問題 04A2 参照)
stdin
)
と「標準出力」(standard output, stdout
)
と呼ばれる$ ./prog1 <inputfile.txt
$ ./prog1 >outputfile.txt
$ ./prog1 <inputfile.txt >outputfile.txt
$ prog1 | prog2
04A1in.txt
)
を用意04A1check.txt
)
を用意04A1out.txt
) に保存$ gcc 04A1.c && ./a <04A1in.txt
>04A1out.txt
diff
コマンドで)$ diff 04A1out.txt 04A1check.txt
$ gcc 04A1.c && ./a <04A1in.txt |
diff - 04A1check.txt
04A1: 一文字の入力と出力 ('\''
は \
の文字列ではなく、'
一文字 (\
でエスケープ))
04A2: 文字の番号の調査
04A3: 大文字と小文字の入れ替え
04B1: 様々な型の入出力 (教科書 pp. 385-387 参照)
04B2: バグの入ったプログラムの分析と修正
(今日必ず先生に提出)
04C1 (部分点): ヒント:
入力の一文字ずつ枝分かれを使うか、小さいバッファーに一文字ずらしながら読み込むなど
挑戦は必須、完成は発展問題