演習課題「標準入力からテキストを取得する」
標準入力から文字列を1行取得して、テキストを出力するプログラムを作成してください。
ただし、読み込む文字列には空白やタブは含まれません。
プログラムを実行して、正しく出力されれば演習課題クリアです!
期待する出力値
learning
演習課題「標準入力から数値を取得して計算する」
標準入力から整数データを1行取得して、100倍にした結果を出力するプログラムを作成してください。
プログラムを実行して、正しく出力されれば演習課題クリアです!
期待する出力値
1200
#06:データを読み込んでみよう - 標準入力
実際に、標準入力から読み込むプログラムを作成します。
標準入力を使うと、ファイルからデータを読み込んだり、プログラムの実行時にデータを受け取ったりできるんですよ。
もともとはLinuxなどのUnix系OSで用意されていた仕組みです。
標準入力に対応するようにプログラムをつくっておけば、プログラム実行時に、ファイルを読み込んだり、キーボードからデータを読み込んだり、
パラメータを指定したりというように、入力先を切り替えることができます。
・fgets(エフゲッツ)で標準入力からデータを読み込む#include <stdio.h>
int main(void)
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
}
sscanf(エススキャンエフ)をつかって、データを変換する
・文字列データ#include <stdio.h>
int main(void)
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
// 文字列
char str[10];
sscanf(buf, "%s", str);
printf("hello %s\n", str);
}
※ sscanfを使うと、改行や空白(スペース)を含まない文字列にすることができます。
・数値データ#include <stdio.h>
int main(void)
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
// 数値
int n;
sscanf(buf, "%d", &n);
printf("hello %d\n", n);
}
※ sscanfの中ではnに&(アンド)をつけます。
あるデータを、printfで表示したり、sscanfで受け取ったりするときには、
「変換指定」を使います。
【 printf で使う変換指定 】
○このレッスンで扱うもの
%d : int型の整数値を表示します
%s : 文字列を表示します。
○このレッスンでは扱わないもの
%f : double型の実数値を表示します
%c : 文字を表示します
%p : ポインタの値を表示します
【 sscanf で使う変換指定 】
○このレッスンで扱うもの
%d : 整数を受け取ります
%s : 改行や空白(スペース)を含まない文字列を受け取ります
○このレッスンで扱わないもの
%lf : double型の実数値を受け取ります
%c : 文字を受け取ります
※これ以外にもたくさん存在しますので、興味を持った方は調べてみてください。
defineマクロを使うと、文字列の長さなどを後から変更するときなどに便利です。#include <stdio.h>
#define N 10 // define マクロ
int main(void)
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
char str[N]; // ここのNが書き換わる
sscanf(buf, "%s", str);
printf("hello %s\n", str);
}
Nなどのマクロ名は見分けがつきやすいように、大文字を使うのが一般的です。
このチャプターで作成したコードです。// 標準入力からデータを読み込む
#include <stdio.h>
#define N 10
int main(void)
{
char buf[100];
fgets(buf, sizeof(buf), stdin);
// 文字列
char str[N];
sscanf(buf, "%s", str);
printf("hello %s\n", str);
fgets(buf, sizeof(buf), stdin);
// 数値
int n;
sscanf(buf, "%d", &n);
printf("hello %d\n", n * 2);
}
- C言語入門 - printf関数の変換指定子
https://webkaru.net/clang/printf-format-specifiers/
- C言語入門 - scanf関数の変換指定子
https://webkaru.net/clang/scanf-format-specifiers/
- C言語 - C言語のマクロの基本について
http://www.c-lang.org/detail/macro_basic.html
- C 言語リファレンス
https://msdn.microsoft.com/ja-jp/library/fw5abdx6.aspx