プログラミング演習I 2003年6月25日(第10回) 木村巌.

Slides:



Advertisements
Similar presentations
プログラミング演習 II 2005 年 1 月 19 日(第 9 回) 理学部数学科・木村巌. 前回までの復習 共用体( union type ) 共用体( union type ) 列挙 (enumerated type ) 列挙 (enumerated type ) 構造体、構造体のポインタ、
Advertisements

オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第14章 ファイル操作 (コマンドプロンプト版)
第2回ネットワークプログラミング 中村 修.
第13回 プログラミングⅡ 第13回
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
第8回 プログラミングⅡ 第8回
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報処理Ⅱ 第13回 2006年1月20日(金).
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
情報処理Ⅱ 第13回 2004年01月25日(火).
10: ファイル入出力 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング 2 ファイル処理.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
プログラミング序論 2. n人のインディアン.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
第13章 文字の取り扱い方 13.1 文字と文字型関数 13.2 文字列 13.3 文字型配列への文字列の代入
第7回 プログラミングⅡ 第7回
第14章 ファイル操作 (コマンドプロンプト版)
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング基礎B 文字列の扱い.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第4回 ファイル入出力方法.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
OSが管理している、デフォルトの入出力装置 入力:stdin キーボード 出力:stdout モニタ(コマンドプロンプトの画面)
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
プログラミング序論演習.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
高度プログラミング演習 (11).
標準入出力、変数、演算子、エスケープシーケンス
情報処理Ⅱ 2007年1月26日(金).
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
アルゴリズムとデータ構造 補足資料6-1 「サンプルプログラムcat1.c」
情報処理Ⅱ 2006年11月8日(金).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プログラミング演習I 2003年6月25日(第10回) 木村巌

今日やること 入出力関数の勉強 標準入出力とのやりとり

知識編:ストリーム ストリーム(stream):物理的な機器(端末やテープデバイス)、ファイルなどによらず、読み書きできるものを抽象化したもの.C言語の概念

ストリーム テキスト(text)ストリームとバイナリ(binary)ストリームとがある テキストストリーム;複数の行からなる バイナリストリーム;char型のデータ値の連続

あらかじめ用意されるストリーム Cプログラムが実行を開始するとき、事前に定義され、オープンされるテキストストリームが3つある 標準入力(standard input)、多くの場合、キーボード 標準出力(standard output)、多くの場合、ディスプレイ 標準エラー出力(standard error)、多くの場合、ディスプレイ

FILE構造体 厳密には、構造体であることがCの規格で定められているわけではない ストリームの制御情報を保持するデータ型. stdio.hで定義されている

getchar()とputchar() int getchar(void); 標準入力から1文字読み込む int putchar(int); 標準出力に1文字出力 教科書p.124 リスト7-1, 7-3. ただし、EOFの入力は、CTRL+D

gets()は使わないこと! 教科書にある、char *gets(char *)は使うべきではない!引数として与えるchar *が指す場所に、どのくらいのデータが書き込まれるか、正しく予測する方法はない gets()によるバッファオーバーフロー(buffer overflow)はセキュリティホールの古典的な例.いまどき誰も使いません.

1行入力 fgets() char *fgets(char *str, int size, FILE *stream); streamが示すストリームから、高々size byteだけ読み込み、strに保存する 行末に改行文字があっても、そのまま(gets()は行末の改行文字を削除する) 標準入力からの読み込みは fgets (str, size, stdin); 教科書12.2(p.226)も参照.

fgets()を使った例 /* study-fgets.c */ #include <stdio.h> #define MAXLEN 256 int main (void) { char *str[MAXLEN]; fgets (str, MAXLEN, stdin); /* strに読み込む */ puts (str); /* strを標準出力へ書き出す */ return 0; }

fgets()を使った例2 /* study-fgets2.c CTRL+Dまで入力を鸚鵡返しする */ #include <stdio.h> #define MAXLEN 256 int main (void) { char *str[MAXLEN]; while (fgets (str, MAXLEN, stdin) != NULL) puts (str); return 0; }

書式付入力 scanf()にも、状況に応じて、gets()同様、セキュリティ面でのリスクがある C FAQ12 stdioを参照 教科書p.134, リスト7-6のように、数値の読み取り程度ならばまだ心配ない 問題は、書式指定に%sを使って、文字列を読み取る場合(教科書p.143) 安全性を考慮した例を述べる

メモリからの書式付入力sscanf() const char *sscanf(const char *str, const char *format,…); たとえば、sscanf(str, “%d”, &n); で、charの配列strから1つのintを読み、nに保存する

書式付入力sscanf()の例 #include <stdio.h> #define MAXLEN 256 /* study-scanf.c */ int main (void) { int n; char str[MAXLEN]; fgets (str, MAXLEN, stdin); /*標準入力からMAXLEN読み取る */ sscanf (str, “%d”, &n); /* 読み取った文字列を、整数として読む */ printf ("input = %d\n", n); return 0; }

ループしてみる例 #include <stdio.h> #define MAXLEN 256 /* study-scanf2.c */ /* 入力された実数の総和を返す*/ int main (void) { double n, sum = 0.0; char str[MAXLEN]; while (fgets (str, MAXLEN, stdin) != NULL) { sscanf (str, "%lf", &n); printf ("input = %f\n", n); sum += n; } printf ("sum = %f\n", sum); return 0;

書式付出力printf() 教科書7.4参照.

まとめ 主に標準入出力への入出力を学んだ 標準入力からの読み込み:fgets() 文字列の書式付入力:sscanf() 標準出力への書式付出力:printf() gets()やscanf()の潜在的なセキュリティホールについて

補足 printf()はstdoutへ書き出す, scanf()はstdinから読み込む fprintf()は最初の引数で指定するストリームへ書き出す、fscanf()は最初の引数で指定するストリームから読み込む sprintf()は最初の引数で指定するcharの配列へ書き出す、sscanf()は最初の引数で指定するcharの配列から読み込む

教科書で残っている範囲 テキストの内容でまだやってないのは、 次回はファイル入出力の予定です 文字列に関する箇所 ポインタ 標準ライブラリ関数の大半 ファイル入出力の大半 次回はファイル入出力の予定です

レポート課題 課題:スライド15枚目のstudy-scanf2.cを参考に、Ctrl+Dが押されるまで与えられた実数の、平均値を求めるプログラムを作成せよ. いつもどおり木村までメールで送ること.締め切りは7/1(火)一杯.質問なども適宜、随時受け付けます. 添付ではなく、メール本文に書いてくれたほうが助かります.