プログラミング実習

プログラミング論
第十回
整数・浮動小数点数・文字・文字列
の入出力
本日の内容

文字・文字列の入出力を行う
– scanf関数と入力の変換仕様
これで先週までの復習

ensyu21.cを見てみましょう。
文字の入出力を行う

次のプログラムを実行してみましょう
//ensyu22.c
一文字の入出力
#include <stdio.h>
int main(void)
{
int ch;
ch = getchar();
putchar(ch);
return 0;
}
キーボードから入力された
一文字を,文字コードに変換
して整数型変数に代入します。
文字の入出力を行う

次のプログラムを実行してみましょう
//ensyu22.c
一文字の入出力
#include <stdio.h>
int main(void)
{
int ch;
ch = getchar(); 整数型変数に保存された数値を
putchar(ch);
文字コードで解釈して画面に表示
します。
return 0;
}
文字の入出力を行う

putcharでは,次のように直接文字や文字コードの指定ができます。
//ensyu22.c
一文字の入出力
#include <stdio.h>
文字の場合は’ ‘で囲んで与えます。
‘\n’として改行することもできます。
int main(void)
文字コードは整数値で与えます。
{
16進数のコードで与えたいときは,
int ch;
0x41と入力します(文字Aの場合)。
}
// ch = getchar();
putchar( ‘A’);
putchar( 65 );
return 0;
ensyu22.cを訂正して動作確認してください
一文字の入出力を行う -演習


ensyu23.cは,一文字の入出力をscanfを
用いて行うものである。
空欄に適切な処理を書き入れ,プログラ
ムを完成させなさい。
文字列の入出力を行う

次のプログラムの動作を確認しましょう。
//ensyu24.c 文字列の入出力を行う
#include <stdio.h>
int main(void)
{
char ss[80];
gets(ss);
puts(ss);
return 0;
}
文字列変数です。
最大80文字まで
保存可能です。
文字列の入出力を行う

次のプログラムの動作を確認しましょう。
//ensyu24.c 文字列の入出力を行う
#include <stdio.h>
int main(void)
{
char ss[80];
gets(ss);
puts(ss);
return 0;
}
キーボードから文字列を
入力する関数です。
文字列を保存する配列名
を与えます。
文字列の入出力を行う

次のプログラムの動作を確認しましょう。
//ensyu24.c 文字列の入出力を行う
#include <stdio.h>
int main(void)
{
char ss[80];
gets(ss);
puts(ss);
return 0;
}
文字列を出力する関数です。
文字列変数(配列名)を指定します。
“ABC”のように直接文字列を指定する
こともできます。
演習

ensyu24.cのプログラムにおいて,
puts(ss); と同じ働きをするように,この処
理をprintfで置き換えてください。
文字列の終端について





文字列は,終わりを指定しなければ,どこまでを
正しい文字列データとして表示すればよいのか分
かりません。
文字列を入力したとき,その終端には「文字列終
端マーク」が自動的に挿入されます。
文字列終端マークのことを「NULL文字」といいま
す。
通常は「数値の0」です。
「数値の0」では,通常の数値変数の意味なのか,
終端マークの意味なのか分かりにくいので,’\0’
と特殊表現することもあります。
演習-文字列終端マーク




ensyu25.cは,文字列変数に初期値として
”hamamoto kazuhiko”という文字列が与えら
れているプログラムです。
このまま実行すると,
hamamoto kazuhiko
と表示されます。
5文字目に「数値の0」を代入した場合の出力を
確認してください。
同様に,「特殊文字’\0’」を代入した場合の出
力を確認してください。
scanfによる文字列の入力
//ensyu26.c scanfを用いた文字列の入力
#include <stdio.h>
int main(void)
{
char ss[80];
scanf("%s", ss);
puts(ss);
return 0;
}
文字列の変換仕様
は%sとなります。
配列変数の場合は,&が必
要ありません。
詳しくは,後期に学習しま
す。
scanfによる文字列の入力


ensyu26.cにおいて,
hamamoto kazuhiko
と入力してみましょう。
どのように出力さましたか?
hamamoto のみの出力・・・?
scanf(“%s”, …); では,スペースは文字列終端マーク
として判断されるので注意が必要です。
演習 - scanfとgetsの違い





ensyu27.cを実行してみましょう。
入力は hama kazu でお願いします。
gets()とscanf()とで,2回入力します。
それぞれの場合において,一文字ずつ文
字コード(十進数)を出力させるプログラ
ムです。
hamaとkazuの間の「スペース」の扱いの
違いを確認してください。