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);

この書き方では、

  • スペース
  • タブ
  • 改行

が来た時点で、入力が終了します。

つまり👇

入力実際に入る内容
TaroTaro
TaroYamadaTaroYamada
Taro YamadaTaro

フルネームや文章を入力したい場合は、
別の方法が必要になりますが、
入門段階ではこの仕様を理解しておけばOK です🙂

数値を文字列として受け取る理由🤔

「年齢」や「点数」なら、
最初から int 型で受け取ればいいのでは?
と思いますよね😊

でも、入門ではあえて

  • 文字列で入力
  • atoiで整数に変換

という流れを使います。

理由は👇

  • 文字列入力の練習になる。
  • 型変換の流れが理解できる。
  • 入力ミスへの考え方を学べる。

ためです✨

atoiとの組み合わせを復習😊

int age = atoi(ageStr);
項目内容
atoi文字列を整数に変換
ageStr数値文字列
ageint型の結果

入力が "29" なら 29 に、
入力が "10A23" なら 10 になります🙂

scanfを使うときのおまじない🪄

C言語で命令を使うには、
対応するヘッダファイルを読み込む必要 があります。

命令必要なヘッダ
printf / scanfstdio.h
atoistdlib.h

今の段階では、
「使いたい命令に応じて書くおまじない」
くらいの理解で大丈夫です😊

より安全なscanfの使い方🔐

実務では、
単純な scanf("%s", 変数); は
安全性の面であまり使われません😮

理由は、
👉 長すぎる入力でメモリを壊す可能性がある
からです。

そこで、次のような書き方が使われます👇

scanf("%1023s%*[^¥n]%*c", ➀);

少し難しそうですが、分解すると理解できます😊

部分意味
%1023s最大1023文字まで読み取る。
%*[^¥n]改行までの残りを読み捨てる。
%*c改行文字を読み捨てる。
String型の変数

この書き方では、

  • バッファオーバーフローを防ぐ。
  • 次の入力に影響を残さない。

というメリットがあります✨

入門では「こんな安全な書き方もあるんだな🙂」
と知っておくだけで十分です。

scanfの役割まとめ✨

ポイント内容
scanfキーボード入力を受け取る。
%s文字列を入力
入力待ちプログラムは止まらない。
Enter入力確定
atoi数値文字列を整数に変換

これで、

  • 表示
  • 入力
  • 計算

が一通りできるようになりました🎉

ここまで来れば、
C言語で「会話できるプログラム」 が書けるようになりました😊