広告
↓発売日:2018年09月22日↓
新品価格 |
今回はファイル処理に必要な基礎知識、入出力に関しての事と変数のサイズを調べてみたいと思います。
みなさんが普通にキーボードから入力して画面に出力する。
実はこのキーボードからの入力と画面への出力には正式名称のようなものがあります。
キーボードからの入力を標準入力といいプログラムでは「stdin」と表されます。
画面への出力を標準出力といいプログラムでは「stdout」と表されます。
(※普通のパソコンの場合です。リダイレクトといってこの標準入出力の内容を変更する事もできます)
スタンダード(通常・標準)なインとアウトみたいな意味です。
ちょっとここまでだと何をいっているのか意味わからないと思いますのでもう少し続きを見てみましょう。
まず前回学んだファイル書き込みの「fputs()」を使った簡単なプログラムをご覧ください。
/*五日目 プログラム1*/ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main(){ const char* str = "hello world!!!"; FILE* fp; fp = fopen("test.txt", "w"); if (fp == NULL){ printf("ファイルオープン失敗\n"); exit(1); } fputs(str,fp); fclose(fp); return 0; }
「hello world!!!」という文章を用意して「test.txt」に書き込みをしてみました。
前回学んだ通りです。
何も問題はないですね!
ではこの「fputs()」に注目した次のプログラムを実行してみてください。
/*五日目 プログラム2*/ #include <stdio.h> int main(){ const char* str = "hello world!!!"; fputs(str,stdout); printf("\n"); return 0; }
なんと画面にさきほどの文章が表示されました!
プログラムの「fputs()」を見てみると
fputs(str,stdout);
書き込む先が「stdout」つまりは標準出力になっているのが確認できます。
書き込む場所がファイルから画面になったという事ですね!
そうなんです!
「書き込む場所や読み込む場所が変わるだけで同じ手順で操作できるようにしましょう!」
っていうのが大事なトコロで、この考え方をストリームと言います。
ファイルもキーボードも画面も同じストリーム(流れ)で処理しようみたいな感じです。たぶん。
と、いう事はもう一つの標準入力も同じように考える事ができそうです。
次のプログラムを実行してみてください。
入力待ちになりますので適当な文章を入力してエンターを押してください。
/*五日目 プログラム3*/ #include <stdio.h> int main(){ char str[256]; fgets(str,256,stdin); printf("%s",str); return 0; }
思った通り、読み込む場所を標準入力である「stdin」に変更したのでキーボードからの読み取りになりました!
このストリームという考え方はこのファイル入出力だけではなく通信プログラムなどにおいても同じような考え方が使われます。
もちろん全て同じ手順というワケではないですが、例えば出力先をプリンターにすればプリンターから印刷され、バーコードリーダーからの入力に切り替えればバーコードを読み取ろうとする、とかそんな感じです。
今後いろいろな場面で登場する事になると思いますので覚えておきましょう!
広告
続いて変数のサイズを調べたいと思います。
そんなサイズなんて調べてどうするんだと思うかもしれませんが、この「正確なサイズを知る」という場面がこの後ちょくちょく出てきます。
/*五日目 プログラム4*/ #include <stdio.h> int main(){ printf("char = %d\n",sizeof(char)); printf("int = %d\n",sizeof(int)); return 0; }
サイズを調べるには「sizeof()」というものを使います。
以前にも少し使いましたね。
カッコの中に調べたい変数やら配列やらをいれればサイズを求める事ができます。
/*五日目 プログラム5*/ #include <stdio.h> struct AAA{ char c[128]; int x,y; }; struct AAA aaa; int main(){ printf("aaa = %d\n",sizeof(aaa)); printf("struct AAA = %d\n",sizeof(struct AAA)); return 0; }
構造体のサイズを調べる事もできます。
「char c[128]」→128バイトに「int x,y」→8バイトを足すので合計136バイトですね!
最後に「sizeof」を使った簡単なテクニックをご紹介します。
/*五日目 プログラム6*/ #include <stdio.h> int main(){ int count; int hairetu[10] = {0,1,2,3,4,5,6,7,8,9}; printf("hairetu = %d\n",sizeof(hairetu) / sizeof(int)); for(count = 0;count < sizeof(hairetu) / sizeof(int);count++){ printf("hairetu[%d] = %d\n",count,hairetu[count]); } return 0; }
「for」文の中の「sizeof」に注目です。
for(count = 0;count < sizeof(hairetu) / sizeof(int);count++)
「sizeof(hairetu)」だとサイズは「40」になりますね。
「sizeof(int)」のサイズは「4」です。
これを「40÷4」とすると「10」でつまりは配列の個数が求められるワケです。
こうすれば配列の大きさが変わった時も「for」文は変更せずに済みますね。
それでは基礎知識を補充したトコロで次回は再びファイル処理に関する事をやっていきたいと思います。
広告
↓発売日:2016年02月29日↓
12歳からはじめる ゼロからのC言語 ゲームプログラミング教室 新品価格 |
↓発売日:2018年06月22日↓
新品価格 |
↓発売日:2018年03月09日↓
新品価格 |
↓発売日:2017年06月14日↓
新品価格 |
↓発売日:2018年05月21日↓
新品価格 |
↓発売日:2017年12月07日↓
新品価格 |
↓発売日:2017年02月08日↓
新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ) 新品価格 |
↓発売日:2017年09月26日↓
新品価格 |