
C言語入門|scanfによる文字列入力:C言語でキーボード入力を扱う基本
ここでは、
C言語でキーボードから文字列を入力する方法
を学んでいきます⌨️😊
画面に表示するだけのプログラムも楽しいですが、
ユーザーの入力を受け取れるようになると、できることが一気に広がります!
ゲームで名前を入力したり、年齢を聞いたり、コマンドを入力したり…
その第一歩が、今回の scanf です✨

キーボード入力ができると何が変わる?🤔
今までのプログラムは、
- 表示する内容が決まっている。
- 実行するたびに同じ流れ
というものでしたよね🙂
でも、キーボード入力ができるようになると、
- ユーザーの名前を聞く
- 数値を入力させて計算する
- 入力内容で処理を変える
といった 対話型プログラム が作れるようになります🎮
scanfで文字列を入力する😊
C言語でキーボード入力を受け取る代表的な命令が scanf です。
基本形はこちら👇
scanf("%s", ➀);| 項目 | 内容 |
|---|---|
| %s | 文字列を入力する指定 |
| ➀ | 文字列型の変数 |
| 必要なヘッダ | stdio.h |
この命令が実行されると、
👉 プログラムは一時停止して、入力を待つ状態
になります⌛
「止まった?」と思ったら入力待ち😮
scanf を初めて使うと、こんな体験をする人がとても多いです。
あれ?
プログラムが止まっちゃった…?
でも、安心してください😊
それは フリーズではありません。
キーボード入力を待っているだけ なんです⌨️
Enterキーが押されると、
入力された内容が変数に格納されて処理が再開されます✨
文字列入力の流れを確認しよう🧪
少し内容をアレンジしたサンプルを見てみましょう。
プロジェクト名:3-13-1 ソースファイル名: sample3-13-1.c
#include <stdio.h>
#include <stdlib.h>
typedef char String[1024];
int main(void)
{
String userName;
printf("ニックネームを入力してください。\n");
scanf("%s", userName);
String scoreStr;
printf("スコアを入力してください。\n");
scanf("%s", scoreStr);
int score = atoi(scoreStr);
printf("%sさんのスコアは %d 点です!\n", userName, score);
return 0;
}実行の流れはこんな感じです👇
1️⃣ 画面にメッセージを表示
2️⃣ scanfで入力待ち
3️⃣ Enterが押されるまで待機
4️⃣ 入力内容を変数に保存
5️⃣ 次の処理へ
scanfとprintfは相棒🤝
scanf は 入力、printf は 出力。
この2つはセットで使われることがとても多いです😊
| 命令 | 役割 |
|---|---|
| printf | 画面に表示する。 |
| scanf | キーボードから入力を受け取る。 |
この組み合わせだけで、
会話しているようなプログラム が作れます✨
scanfで入力できるのは「1単語」☝️
ここで大事な注意点があります⚠️
scanf("%s", name);この書き方では、
- スペース
- タブ
- 改行
が来た時点で、入力が終了します。
つまり👇
| 入力 | 実際に入る内容 |
|---|---|
| Taro | Taro |
| TaroYamada | TaroYamada |
| Taro Yamada | Taro |
フルネームや文章を入力したい場合は、
別の方法が必要になりますが、
入門段階ではこの仕様を理解しておけばOK です🙂
数値を文字列として受け取る理由🤔
「年齢」や「点数」なら、
最初から int 型で受け取ればいいのでは?
と思いますよね😊
でも、入門ではあえて
- 文字列で入力
- atoiで整数に変換
という流れを使います。
理由は👇
- 文字列入力の練習になる。
- 型変換の流れが理解できる。
- 入力ミスへの考え方を学べる。
ためです✨
atoiとの組み合わせを復習😊
int age = atoi(ageStr);| 項目 | 内容 |
|---|---|
| atoi | 文字列を整数に変換 |
| ageStr | 数値文字列 |
| age | int型の結果 |
入力が "29" なら 29 に、
入力が "10A23" なら 10 になります🙂
scanfを使うときのおまじない🪄
C言語で命令を使うには、
対応するヘッダファイルを読み込む必要 があります。
| 命令 | 必要なヘッダ |
|---|---|
| printf / scanf | stdio.h |
| atoi | stdlib.h |
今の段階では、
「使いたい命令に応じて書くおまじない」
くらいの理解で大丈夫です😊
より安全なscanfの使い方🔐
実務では、
単純な scanf("%s", 変数); は
安全性の面であまり使われません😮
理由は、
👉 長すぎる入力でメモリを壊す可能性がある
からです。
そこで、次のような書き方が使われます👇
scanf("%1023s%*[^¥n]%*c", ➀);少し難しそうですが、分解すると理解できます😊
| 部分 | 意味 |
|---|---|
| %1023s | 最大1023文字まで読み取る。 |
| %*[^¥n] | 改行までの残りを読み捨てる。 |
| %*c | 改行文字を読み捨てる。 |
| ➀ | String型の変数 |
この書き方では、
- バッファオーバーフローを防ぐ。
- 次の入力に影響を残さない。
というメリットがあります✨
入門では「こんな安全な書き方もあるんだな🙂」
と知っておくだけで十分です。
scanfの役割まとめ✨
| ポイント | 内容 |
|---|---|
| scanf | キーボード入力を受け取る。 |
| %s | 文字列を入力 |
| 入力待ち | プログラムは止まらない。 |
| Enter | 入力確定 |
| atoi | 数値文字列を整数に変換 |
これで、
- 表示
- 入力
- 計算
が一通りできるようになりました🎉
ここまで来れば、
C言語で「会話できるプログラム」 が書けるようになりました😊
