【基礎から学ぶプログラミング言語】 C言語/文字列を表示する方法 ~printf関数の使い方と変換指定子について~

IT
スポンサーリンク
スポンサーリンク
スポンサーリンク

私たちは日常生活で何気なくパソコンやスマートフォンというコンピュータを使用しています。
これらのコンピュータが普通に動作しているのは、そのようにプログラミング言語が記述されているからです。
本記事は、そんなプログラミング言語について実際に学びながら要点をまとめていったメモという位置付けになります。
私は専攻が電気でプログラムに関しては全くの初心者ですので、同様に初心者の方には理解しやすくなっているかと思います。

今回は、「C言語/文字列を表示する方法」についての説明です。

1.初めに

プログラミング言語には様々な種類がありますが、まずは色々なプログラミング言語のベースになっているというC言語の使い方から勉強していきます。

最初に取り扱う関数は「printf」です。
簡単に言えば、文字列を表示するプログラムです。

使い方次第で簡単な計算などもできるので、入門にちょうど良い関数となっています。

2.printfの基本的な使い方

まずは、以下のようにプログラムを書いてみます。

#include<stdio.h>

void main() {
printf(“HelloWorld.”);
}

図1

【#include】とは、ヘッダファイルというものを読み込む際の宣言です。
C言語のヘッダファイルは「.h」という拡張子になっていて、これを読み取るために必要になります。
ここでは、『とりあえず必要なんだな~』と思っておけば良いです。

今回覚えておきたいのは、【void main() {}】と記述すると、中括弧内に記述した他の関数が実行されるようになるという点です。
つまり、この記述で実行されるプログラムは、【printf(“HelloWorld.”);】の部分ということです。
一応、【void】は論理値を戻さないという宣言なのですが、今説明してもよくわからないと思いますので、一旦置いておきましょう。

printfは、括弧内に入力した文字(※ダブルクオーテーションで挟む必要あり)を表示する効果があります。
英語でも日本語でも対応しています。

試しにこのプログラムを実行してみましょう。
実行の方法は、「デバッグ」内の「デバッグなしで開始」を選択するだけです。

図2

仮に入力ミスがあると、以下のようなエラーメッセージが表示されます。
中括弧を括弧にしたり、「;(セミコロン)」を「:(コロン)」にしたりするとエラーになりますので、試しにわざとエラーにしてみるのも良いかもしれませんね。

図3

エラー無しで正常に実行されると、以下のようなウィンドウが表示されます。

図4

「”(ダブルクオーテーション)」で挟んだ「HelloWorld.」という文字列が表示されたでしょう?
これがprintf関数の基本的な効果です。

ちなみに、「;(セミコロン)」は処理の末尾に記述する記号という扱いになっていますので、ここで覚えておきましょう。
ある関数を実行するなら、その末尾には毎回「;」を付ける必要があるのです。

3.printfの基本的な使い方(小技編)

改行のルール

以下のように【main() {}】の中にもう1つprintfの記述をすると、その追加分の文字列も表示されるようになります。

図5

ただ、プログラムの記述を分けても、表示される行は変わらないんですね。

もし改行したい場合は、改行を表す【\n】を入力しましょう。
【\n】を入力すれば、そこで強制的に改行処理が実行されるようになっています
文字列の途中だろうが、問答無用です。

図6

【\n】のように、\マークで始まる文字のことはエスケープシーケンスと呼びます。

文字の変換(変換指定子)

以下のようにプログラムを書いてみます。

#include<stdio.h>

void main() {
printf(“おはよう、%sさん。”,”鈴木”);
}

図7

謎の【%s】という文字列が登場しましたね。

通常なら「おはよう、%sさん。」と表示されそうなものですが、実際に実行した結果は「おはよう、鈴木さん。」になっています。
こうなる理由は、【%s】は文章の後に記述した文字列に置き換わる効果を持っているからです。

改めて入力内容を見てみると、【”おはよう、%sさん。”】で文章が一区切りついた後に【,”鈴木”】と入力されていますよね?
このように、文章が終わったところで「,( コンマ)」を入力し、その後に入力した「”(ダブルクオーテーション)」で挟んだ文字列が【%s】に入力されるというルールになっています。

この【%s】のような変数のことを、変換指定子と呼びます。
変換指定子は結構な種類が存在するので、ここでは主要なものを後2種類紹介します。
※変換指定子はprintf関数以外にも使用されます。

次は、続けて以下のようにプログラムを書いてみます。

#include<stdio.h>

void main() {
printf(“おはよう、%sさん。\nもう%d時ですよ?”,”鈴木”,12);
}

図8

今度は【%d】が出てきましたね。
ここには、文章が一区切りついた後の【,12】の部分が反映されています。
この結果からわかる通り、【%d】は文章の後に記述した数字(※厳密には整数を10進数として表現する)に置き換わる効果を持っています。
この数字には「”(ダブルクオーテーション)」が付いていませんが、これが正しいです。
変換指定子ごとにここのルールは微妙に異なってきます。

仮にここで「”(ダブルクオーテーション)」で挟んで整数を入力すると、エラーは発生しませんが数字がおかしくなります。
まあ、試してみるのが一番早いと思いますよ?

ちなみに、この例のように変換指定子を連続で使用する場合、変換指定子の登場した順番に文章の後の記述の順番を合わせる必要があります。
要は、【%s】の次に【%d】が来るように記述してあるので、【,”鈴木”】の次に【,12】と入力してくださいというだけの話です。
もしこの記述を反対にすると、警告が出てうまくプログラムは動かない結果になります。
※警告が出ても動くプログラムはある。ここでは動かないという話です。ただ、警告が出ているとプログラムの動作に何らかの影響を与えてしまう可能性があるので、基本的には警告が全くでない状態にするべきです。

次は、以下のようにプログラムを書いてみます。

#include<stdio.h>

void main() {
printf(“おはよう、%cさん。\n”, ‘A’);
printf(“もう%d時ですよ?\n”,12);
}

図9

今度は【%c】が出てきましたね。
ここには、文章が一区切りついた後の【,’A’】の部分が反映されています。
【%c】は文章の後に記述した1文字に置き換わる効果を持っています。
【%s】は文字列でしたが、【%c】は文字なのです。
文字の場合は「'(シングルクォーテーション)」で挟むルールとなっています。

◎まとめ
【%s】が文字列[string(文字列)]、%dが整数[decimal(10進数)]、%cが文字[character(文字)]に対応した変換指定子となっています。
基本的には文字列は「”(ダブルクオーテーション)」、文字は「'(シングルクォーテーション)」で挟むルールになっており、数字は挟むモノは不要です。
この組み合わせを間違えると正しく表示されないので、そこには注意しましょう。
また、ここでは実例は記載しませんが、他にも【%x】-16進数【%f】-実数などに対応した種類が存在します。

計算

以下のようにプログラムを書いてみます。

#include<stdio.h>

void main() {
printf(“%f+%f=%f”, 1.0, 2.0, 1.0 + 2.0);
}

図10

【%f】は実数への置換が可能なので、3つの【%f】に対応する実数を文章の後に入力しています。
この内、3つ目の【%f】には【1.0+2.0】と入力してありますね?
このように計算式を入力することで、printfを使った演算も可能になっています。

ちなみに、ここでは「+」で加算にしていますが、「*」にして乗算にすることも可能です。

以上、「C言語/文字列を表示する方法」についての説明でした。