第8章 標準出力関数(2)

標準入出力関数には第5章で説明した printf() や scanf() の他にも 下のように 1文字専用の入出力関数と 1行専用の入出力関数が用意されています。

標準入力
  1. getchar():1文字入力
  2. gets():1行入力
  3. scanf():書式付き入力
標準出力
  1. putchar():1文字出力
  2. puts():1行出力
  3. printf():書式付き出力

尚、標準入出力関数を使用するには、#include <stdio.h> が必要です。

「#include」については「18-2.#include」 を参照してください。


8−1.getchar()

キーボードから1文字入力

(書き方)
int ch1;
char ch2

ch1 = getchar();	----
			⇒どちらも一文字を入力します
scanf("%c", &ch2);	----
 この getchar()でも scanf()と同様に復改が残る現象が起こります。
注意してください。(2001.11.16追記)

8−2.putchar()

画面に 1文字出力

(書き方)
int ch = 'A';

putchar(ch);	----
			⇒どちらも一文字を出力します
printf("%c", ch);	----

「Ctrl+Z」(UNIXの環境では「Ctrl+D」)が入力されるまで、1文字入出力を行う

(書き方)
#include <stdio.h>		…必要

int main(void)
{
	int stg; 
	
	while ((stg = getchar()) != EOF) {	…「Ctrl+Z が入力されるまで」
		putchar(stg);			という意味
	}
	
	return 0;
}

【getchar()が何故 int型変数で受けるのか】

getchar()は入力が終了したときに上記のように「EOF」という値を返します。 この EOF は <stdio.h> の中で宣言されているのですが、その値は通常は「-1」です。 普通 char型は「-128〜127」の範囲を扱うのですが、0〜255で文字コードを扱う処理系では「0〜255」となり、この「-1」が扱えません。これに対し「int型」はどの処理系でも「-1」が扱えます。 ですから、どの処理系でも「EOF」が返せるように、getchar()は int型変数で値を受け取るのです。

尚、「Ctrl+Z」の入力については、6-8 もご参照ください。

演習

8−3.gets()

キーボードから文字列を 1行入力

(書き方)
char str[256];

gets(str);	----
			⇒どちらも文字列を入力します
scanf("%s", str);	----
 gets() は「復改がくるまで」文字列を読込む:スペースを読込める
  scanf() は「復改やスペースなどの空白類文字がくるまで」文字列を読込む:スペースは読込めない
どうして文字列を入れる配列は十分な大きさをとる必要があるのでしょう。
余裕のある人は掲示板の書き込みを見てみましょう。(2002.03.23追記)

8−4.puts()

画面に文字列を出力して復改する

(書き方)
char str[] = "computer";

puts(str);		----
				⇒どちらも文字列を出力します
printf("%s\n", str);	----

★ 「Ctrl+Z」(UNIXの環境では「Ctrl+D」)が入力されるまで、文字列入出力を行う

(書き方)
#include <stdio.h>		…必要

int main(void)
{
	char str[256];
	
			EOFではないので注意が必要
			  
	while (gets(str) != NULL) {	…「Ctrl+Z が入力されるまで」
		puts(str);			という意味
	}
	
	return 0;
}
 「NULL」は空ポインタ定数で一般に「ヌル」と呼ばれ、値は一般に「0」です
(処理系によっては 0 ではない場合もあります)。
この NULL は本来返却されるはずのポインタが何らかの事情で返却されないときに用いられます。
ポインタについては第10章で説明しますが、ここでは、「Ctrl+Z」が入力されると、
文字列のポインタではなく空ポインタ定数の「NULL」が返却されることを理解しておいてください。
演習
◆◆前ページ  ▲TOP▲  次ページ◆◆

banner
「初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved