C言語の標準入力stdinから値を読み込む方法を教えて!
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
目次
標準入力stdin
C言語の標準入力stdinから読み込む値は以下になります.
- 文字
- 文字列
- 数値(整数や浮動小数点数)
それぞれの方法を解説していきます.
標準入力から文字の読み込み
標準入力から文字を読み込む方法を紹介します.
getchar関数
1 |
int getchar(void); |
getchar関数は,stdinから次の文字をunsigned char型として読み込み,int型にキャストして返します.
ファイルの終わりやエラーとなった場合はEOFを返します.
getchar関数を利用するコードは以下になります.
getchar関数で読み込んだ文字をputchar関数で出力しています.EOFを読み込んだら終了します.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) { putchar(c); } return 0; } |
実行結果は以下になります.
3行目でabcを入力したら4行目でabcと出力されます.
EOFを入力したら実行を終了します.
1 2 3 4 5 6 |
$ gcc getchar.c $ a.out abc abc [EOFを入力] $ |
getc関数
1 |
int getc(FILE *stream); |
getc関数は,streamから文字を読み込むこと以外はgetcharと同じです.
つまり,getc(stdin)は,getchar()と同じです.
また,getc関数は, streamを複数回評価するマクロとして実装される可能性があります.
getc関数を利用するコードは以下になります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> int main(void) { int c; while ((c = getc(stdin)) != EOF) { putc(c, stdout); } return 0; } |
実行結果は以下になります.同じです.
1 2 3 4 5 6 |
$ gcc getc.c $ a.out abc abc [EOFを入力] $ |
fgetc関数
1 |
int fgetc(FILE *stream); |
fgetc関数は,streamを複数回評価するマクロとして実装される可能性がないこと以外はgetc関数と同じです.
つまり,fgetc関数は,必ず関数として実装されます.
実行結果は以下になります.同じです.
1 2 3 4 5 6 |
$ gcc fgetc.c $ a.out abc abc [EOFを入力] $ |
標準入力から文字列の読み込み
標準入力から文字列を読み込む方法は,こちらの記事に詳しく記載してあります.
標準入力から数値(整数や浮動小数点数)の読み込み
標準入力から数値(整数や浮動小数点数)を読み込む方法を紹介します.
数値は書式指定子で取得します.また,文字や文字列も書式指定子で取得できます.
scanf関数
1 |
int scanf(const char *format, ...); |
scanf関数は,formatに従って標準入力ストリームstdinからの入力を読み込みます.
scanf関数を利用するコードは以下になります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> #define BUFSIZE 16 int main(void) { int i; double d; char s[BUFSIZE]; scanf("%d", &i); printf("i = %d\n", i); scanf("%lf", &d); printf("d = %lf\n", d); scanf("%s", s); printf("s = %s\n", s); return 0; } |
実行結果は以下になります.
3行目の行末で整数の1,5行目の行末で浮動小数点数の3.14,7行目の行末で文字列のabcを入力したところ,次の行で正しく出力できていることがわかります.
1 2 3 4 5 6 7 8 |
$ gcc scanf.c $ a.out Please input an integer: 1 i = 1 Please input a real number: 3.14 d = 3.140000 Please input a string: abc s = abc |
fscanf関数
1 |
int fscanf(FILE *stream, const char *format, ...); |
fscanf関数は,formatに従ってストリームポインタstreamからの入力を読み込みます.
fscanf関数を利用するコードは以下になります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> #define BUFSIZE 16 int main(void) { int i; double d; char s[BUFSIZE]; printf("Please input an integer: "); fscanf(stdin, "%d", &i); printf("i = %d\n", i); printf("Please input a real number: "); fscanf(stdin, "%lf", &d); printf("d = %lf\n", d); printf("Please input a string: "); fscanf(stdin, "%s", s); printf("s = %s\n", s); return 0; } |
実行結果は以下になります.同じです.
1 2 3 4 5 6 7 8 |
$ gcc fscanf.c $ a.out Please input an integer: 1 i = 1 Please input a real number: 3.14 d = 3.140000 Please input a string: abc s = abc |
まとめ
C言語の標準入力stdinで値を読み込む方法を紹介しました.
標準入力から文字,文字列,数値を読み込む方法をきちんと習得して使いこなしましょう!
標準出力と標準エラー出力の違いを知りたいあなたはこちらからどうぞ.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!