文字列入出力
文字列専用の関数を使う
printf()関数やscanf()関数は非常に汎用的な関数です
しかし、scanf()関数で話した様に、文字列の入力や出力に必ずしも向いているとは言えません
C言語の標準関数には、文字列の入出力専用の関数が用意されています
たとえば、文字列を標準出力へ出力する場合は、printf()よりも適任であると言えます
文字列を出力するにはputs()関数を使用します
int puts( const char 文字列へのポインタ );
引数には出力する文字列を指定します
戻り値は正常に終了した場合負でない値を、失敗した場合はEOFを返します
puts()関数は、ヌル文字を改行文字に置き換えて出力します
つまり文字列の終端で、自動的に改行してくれると言うことです
#include <stdio.h>
int main() {
puts("Kitty on your lap");
puts("Catd Captor Sakura");
return 0;
}
文字列の出力にputs()を使うのは、printf()関数よりも関数のサイズが小さく
基本的に実行速度も速いからです
ファイル操作のときに、fputs()という関数を覚えましたね
fputs()は、このputs()のストリーム版です
puts()に対して、標準入力からの文字列の読み出しにはgets()関数があります
この関数は標準入力から1行読み出します
改行文字までの全ての文字を読み出すと、改行コードをヌル文字に置き換えます
char *gets( char *バッファ );
成功すると、引数の値を返します
エラーかファイルの終端を検出するとNULLポインタを返します
バッファには読み出した文字列を格納するポインタを指定します
文字列の読み出しには、scanf()よりも適任です
#include <stdio.h>
int main() {
char str[128];
printf("文字列を入力してください>");
gets(str);
printf("入力した値 = %s\n" , str);
return 0;
}
この関数のストリーム版で、やはりfgets()関数というのがありましたね
使い方は、入力先が違うというだけで同じと考えられます
文字列に対して、1文字の入出力をサポートする関数も用意されています
文字を出力するputchar()関数と、文字を入力するgetchar()関数です
int putchar( int c );
int getchar( void );
putchar()には、標準出力へ出力する値をcに指定します
putchar()の戻り値は、エラーが発生するとEOF。それ以外は書き込んだ文字を返します
getchar()は、標準入力から1文字読みとってintにキャストした値を返します
#include <stdio.h>
int main() {
char ch;
printf("文字を入力してください>");
ch = getchar();
printf("入力された値 = ");
putchar(ch);
return 0;
}
これに似た関数でputc()関数とgetc()関数が存在します
これらの関数はfputc()関数とfgetc()関数とまったく同じです
ANSI Cが定められた時、ファイル関数としてfgetc()とfputc()が加わりました
ANSI Cでは、ファイル関数は先頭にfが付くという規則があるためです
しかし、元から存在するgetc()やputc()も伝統的に使われていたために残されています
実装によっては、関数ではなくマクロとして実装している場合もあります
getchar(void)やputchar(int c)は、fgetc(stdin)、fputc( int c , stdout)と機能的に同じです
そして、fgetc()とfputc()はgetc()とputc()に同じです
これらの関係を理解してください
int puts( const char *string );
stdoutに文字列を出力します
ヘッダ - stdio.h
string - 出力する文字列を指定します
戻り値 - 失敗した時にEOF、正常時は負ではない数
int putchar( int c );
stdoutに1文字書き込みます
ヘッダ - stdio.h
c - 書き込む文字を指定します
戻り値 - エラーのときにEOF。正常時は書き込んだ文字
char *gets( char *buffer );
stdinから1列の文字列を読み出します
ヘッダ - stdio.h
buffer - 入力文字を格納する変数のポインタ
戻り値 - 成功すると引数の値、エラー時にはNULL
int getchar( void );
stdinから1文字読み出します
ヘッダ - stdio.h
戻り値 - 読み出した文字。エラー時はEOF