ほぷしぃ

納得C言語!

[第4回]入出力

入出力


1.前準備

A「今まで出てきた"#include <stdio.h>"って何?
B「printf()などC言語ではじめてから用意されている関数を使うのに必要なんだよ」
A「ふ〜ん」
B「今はおまじないだと思ってもらってもいいよ。他にも"string.h"とか"stdlib.h"などがあるけど、しばらくは"stdio.h"しか使わないかな〜」

標準入出力をするには最初に「#include <stdio.h>」を書く必要があります。
今のところはプログラムを動かすのに必要な「おまじない」と言うことで覚えておいてください。


2.標準出力

printf( )

今まで何事もなく使っていたprintf( )ってなんなのさ?と思った人も多いでしょう。
printf( )はC言語で最も多く使われる標準出力です。書式としては以下の通りです。

printfの使い方

printfの( )の中にあるものは引数とよばれているものです。
引数についてはこの後詳しく説明します。
ちなみに引数は「ひきすう」って読むんですよ。
決して「いんすう」なんて読まないでくださいね。
プロのプログラマーの前で「いんすう」なんて言ってしまうと「偽プログラマーだろ?」とか思われちゃいますよ。

余談はさておき、続いて引数の中身について説明します。


(1)書式指定文字列

「""」で囲まれた文字列のことを指します。

1.変換指定文字列

「%」で始まり、主に出力データの変換形式を指定します。

指定文字意味使用データ型
%c1文字出力char型
%d10進数で出力int型
%x16進数で出力
%o8進数で出力
%ld10進数で出力long型
%f[-]dddd.ddddddの形式で出力float型、double型
%e指数形式で出力
%s文字列として出力char型配列


ちなみに、「%」を文字として出力したい場合は「%%」と指定することで「%」を出力することができます。
このように指定する理由は普通に「%」と書いてしまうと、コンピュータは「%が出てきたから、変換指定文字列なんだな」と理解してしまいます。
その後に指定文字以外の文字があるとコンピュータは「こんな指定文字列なんてあったか?」と混乱してしまうのです。
それを避けるために「%」を表示させたい場合は「%%」とはっきりさせておく必要があるのです。

2.拡張表記

一般的にはエスケープシーケンスと呼ばれています。
「\」で始まり、通常の方法では表現できない(不可視)文字を「\」を先頭に付けることで出力することができます。
これから多用すると思われるものを例としてあげていきます。

エスケープシーケンス意味
\n改行
\tタブ
\0文字列の終了を表す


もしも「\」、「"」、「'」をプログラム上で出力したい場合は「\」を頭に付けることで表示することができます。
このようにする理由は先ほどの「%」の時と一緒です。

3.一般文字列

上記に説明した以外の文字列です。
一番初めに何気なく書いたプログラムに実はこれが使われていたんですね。

例題1 画面表示の例

#include <stdio.h>

int main()
{
    //Hello C World! と表示
    printf("Hello C World");

    return 0;
}


(2)変数

(1)の1で指定された形式で変数を出力します。
変数の数は(1)で指定した個数分必要となります。

例題2 printf( )を使った画面表示

#include <stdio.h>

int main()
{
    //変数の宣言
    int a, b;

    //変数の初期化
    a = 5;
    b = 7;

    printf("%d日です\n", 30);       //出力が1つの場合
    printf("%d月%d日です\n", a, b); //出力が2つの場合

    return 0;
}

結果

printf()を使った出力

例題2では、数値の表示と、a,b2つの変数を表示させています。


puts()

画面に文字列を出力して改行します。
printf()のように特別な引数はありません。
()の中に記述するのは「変数」「文字列」のみです。

例題3 puts()を使った画面表示

#include <stdio.h> //おまじない

int main()
{
    char str[] = "ほぷしぃ"//str[]はおまじない

    puts("ほぷしぃ"); //画面に「ほぷしぃ」と出力して改行
    puts(str);        //文字列を出力して改行

    printf("%s\n", str); //文字列を出力して改行

    return 0;
}

例題3では、画面に「ほぷしぃ」と表示させています。

結果

puts()を使った出力

3つとも同じように表示されていますね。


putchar()

画面に1文字出力します。puts()と同じように特別な引数はありません。
()の中に記述するのは「変数」「1文字」のみです。

例題4 putchar()を使った画面表示

#include <stdio.h> //おまじない

int main()
{
    char c = 'A';  //char型変数cにAを表示

    putchar('A');  //画面にAと表示
    printf("\n");  //改行
    putchar(c);    //画面に1文字出力(改行なし)

    printf("\n%c\n", c); //改行して変数cに出力して改行

    return 0;
}

例題4では、画面に「A」と表示させています。
ここで、「char c = 'A'」書いていますが、これは変数の宣言と初期化を同時に行っています。つまり

char c;
c = 'A';

を同時に行っています。

結果

putchar()を使った出力

こちらも、3つとも同じように表示されていますね!


3.標準入力

scanf()

printf()とセットで覚えてほしいのがこのscanf()です。
scanf()はキーボードから書式付きで文字や数値を入力します。
書式としては以下の通りです。

scanfの使い方


(1)指定文字列

printf()の説明であったのと全く同じものです。
但し、1箇所だけ違うところがあるので注意してください。

指定文字意味使用データ型
%c1文字出力char型
%d10進数で出力int型
%x16進数で出力
%o8進数で出力
%ld10進数で出力long型
%ffloat型変数に実数を入力float型
%lfdouble型変数に実数を入力double型
%s文字列として出力char型配列


printf()の時に出てこなかった「%lf」というものが出てきましたね。
これはdouble型の変数に実数を入力するときに使われます。
float型の「%f」と混同しないように気をつけましょう。


(2)入力データを格納する変数のアドレス

アドレスについてはポインタの回で説明します

例題5 キーボードから数値を入力

#include <stdio.h> //おまじない

int main()
{
    int i; //変数の宣言

    printf("整数を入力してください");
    scanf("%d", &i); //入力を求める関数scanf

    printf("入力した数値は%dです\n", i); //scanf()で入力した整数をprintf()で出力

    return 0;
}

例題5では、キーボードから整数を入力し、入力された整数を出力させています。
printf()と違うところは、下線部の変数の前に「&」をつけているところです。

結果

キーボードから数値を入力

入力された数値が表示されましたね。
小数点を入力したらどうなるか、自分で試して見てください。

今のところは「&」の意味や使い方などが分からないと思いますが、後でじっくりと説明しますので、頭の片隅にでも置いて、とりあえずは書き方だけでも覚えてください。


gets()

キーボードから文字列を1行入力します。
scanf()みたいに特別な引数はありません。
puts()とセットで覚えてください。

例題6 文字列の入力

#include <stdio.h> //おまじない

int main()
{
    //str[256]は今はおまじないだと思ってください(第11回で説明します)
    char str[256]; //char型(文字列)の宣言

    printf("文字を入力してください=>");

    gets(str);           //文字列の入力
    printf("%s\n", str); //文字列の出力

    return 0;
}

例題6では、キーボードから文字列を入力し、表示させています。
下線部の「char str[256]」は第11回で説明します。

結果

文字列の入力

文字列を入力して、入力された文字列を表示してますね。

(注意)
scanf()はスペース「 」が入力されると、それ以降の文字列は入力できませんが、gets()はスペース「 」も入力ことができます。
試してみてくださいm(_ _)m


getchar()

キーボードから文字を1文字入力します。
gets()と同じように引数はありません。
putchar()とセットで覚えてください。

例題7 キーボードから1文字入力

#include <stdio.h> //おまじない

int main()
{
    char c; //char型の変数を宣言

    printf("一文字入力してください");

    c = getchar(); //一文字入力
    printf("入力された文字は %c です\n", c); //getcharで入力された文字に出力

    return 0;
}

例題7では、1文字のみの入力を行っています。
あまり使い道は・・・ないかな?

結果

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

1文字入力し、それを出力してますね。
1文字以上の文字を入力したらどうなるか、試して見てください。


4.練習問題

キーボードから「3.141952」と入力し、それを表示するプログラムを作ってみましょう。


[第3回]データ型 ページのトップ 解答