プログラミング論 ファイル入出力 http://www.ns.kogakuin.ac.jp/~ct13140/ProgC/

Slides:



Advertisements
Similar presentations
10: ファイル入出力 Linux にログインし、以下の講義ページ を開いておくこと teachers/w483692/CPR1/ C プログラミング入門 総機 1 ( 月 1) 1.
Advertisements

オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
情報処理演習C2 ファイル操作について (2).
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
構造体(struct) 配列では、複数のデータをひとまとまりにして操作する ことが出来る。しかし、それぞれのデータは同じ型(例えば
データ構造とアルゴリズム 第10回 mallocとfree
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
16.3 関数と構造体 構造体ポインタ 地底探査ゲーム
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
第13回 プログラミングⅡ 第13回
記憶クラス 変数をどのような記憶領域に割り当てるかを指定するのが記憶クラス 記憶クラスには、自動変数、静的変数、外部変数などがある。
第6章 2重ループ&配列 2重ループと配列をやります.
第4回放送授業.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
前回の復習 ファイル入出力①.
10: ファイル入出力 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
第2回 Microsoft Visual Studio C++ を使ってみよう
プログラミング2 関数
Cプログラミング演習 第6回 ファイル処理と配列.
プログラミング 2 ファイル処理.
プログラミング入門2 ファイルの入出力 ポインタ 芝浦工業大学情報工学科 青木 義満
Cプログラミング演習.
関数の定義.
プログラミング論 II 2008年10月30日 文字列
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
プログラミング論 ファイル処理 (中級編)
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
高度プログラミング演習 (08).
プログラミング論 ファイル入出力
Cの実行モデル.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
第4回 ファイル入出力方法.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
東京工科大学 コンピュータサイエンス学部 担当 亀田弘之
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
プログラミング論 ポインタ
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
ファイル操作について (1).
モジュール分割.
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
C言語プログラミング・課題 ファイルを読み込んで、その内容を表示するプログラムを作成せよ。
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
値渡しと参照渡しについて.
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
モバイルプログラミング第3回 Cプログラミングの基礎( 2 )
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
Presentation transcript:

プログラミング論 ファイル入出力 http://www.ns.kogakuin.ac.jp/~ct13140/ProgC/

概要 動的変数と静的変数の初期値 実引数と仮引数,値渡しと参照渡し ファイル処理 簡単 本当はものすごく難しいが,本日は簡単. 詳細は プログラミング3 の ポインタ にて ファイル処理 難しくないが,面倒? 慣れが必要

動的変数と静的変数の初期値 void main() { int x, y, z; printf("%d\n", x); printf("%d\n", y); printf("%d\n", z); } 実行結果 32767 0 ↑ゴミが入っている (gcc & Linuxで実行) int x, y, z; void main() { printf("%d\n", x); printf("%d\n", y); printf("%d\n", z); } 実行結果 ↑0クリアされている グローバル変数,静的(static)変数は,自動的に0で初期化される. staticでないローカル変数は,初期化されずゴミが入っている.

動的変数と静的変数の初期値 void main() { int x, y, z; printf("%d\n", x); printf("%d\n", y); printf("%d\n", z); } Uninitialized variable 'x' used 初期化されていないローカル変数xが使用されています ↑実行できな (Visual Studio 2015で実行) グローバル変数,静的(static)変数は,自動的に0で初期化される. staticでないローカル変数は,初期化されずゴミが入っている.

動的変数と静的変数の初期値 void main() { int x[3]; printf("%d\n", x[0]); printf("%d\n", x[1]); printf("%d\n", x[2]); } 実行結果 -858993460 ↑ゴミが入っている Visual Studioでも実行可能 void main() { static int x[3]; printf("%d\n", x[0]); printf("%d\n", x[1]); printf("%d\n", x[2]); } 実行結果 ↑0クリアされている グローバル変数,静的(static)変数は,自動的に0で初期化される. staticでないローカル変数は,初期化されずゴミが入っている.

実引数 と 仮引数 値渡し と 参照渡し

関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3; func(x); printf("%d\n", x); x 100 番地 3

関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3; func(x); printf("%d\n", x); x 100 番地 3

関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3; func(x); printf("%d\n", x); x a 100 番地 104 番地 3 3 別のメモリに割り当てられた 別の変数

関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3; func(x); printf("%d\n", x); x a 100 番地 104 番地 3 7 別のメモリに割り当てられた 別の変数

関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3; func(x); printf("%d\n", x); x 100 番地 3 実行結果 3

関数の仮引数と実引数(値渡し) void func(int x){ x = 7; } void main(){ int x = 3; この2個を 同じ名前にしても 結果は変わらない. void func(int x){ x = 7; } void main(){ int x = 3; func(x); printf("%d\n", x); x x 100 番地 104 番地 3 3 実行結果 別のメモリに割り当てられた 別の変数 3

関数の仮引数と実引数(参照渡し) void func(int a[2]){ a[0]=3; } void main(){ int x[2]; x[0]=10; x[1]=20; func(x); printf("%d %d\n", x[0], x[1]); X[0] X[1] 100 番地 104 番地 X[] 10 20

関数の仮引数と実引数(参照渡し) void func(int a[2]){ a[0]=3; } void main(){ int x[2]; x[0]=10; x[1]=20; func(x); printf("%d %d\n", x[0], x[1]); X[0] X[1] 100 番地 104 番地 X[] 10 20

関数の仮引数と実引数(参照渡し) void func(int a[2]){ a[0]=3; } void main(){ int x[2]; x[0]=10; x[1]=20; func(x); printf("%d %d\n", x[0], x[1]); a[0] a[1] X[0] X[1] 100 番地 104 番地 X[] 10 20

関数の仮引数と実引数(参照渡し) void func(int a[2]){ a[0]=3; } void main(){ int x[2]; x[0]=10; x[1]=20; func(x); printf("%d %d\n", x[0], x[1]); a[0] a[1] X[0] X[1] 100 番地 104 番地 X[] 3 20

関数の仮引数と実引数(参照渡し) void func(int a[2]){ a[0]=3; } void main(){ int x[2]; x[0]=10; x[1]=20; func(x); printf("%d %d\n", x[0], x[1]); X[0] X[1] 100 番地 104 番地 X[] 3 20 実行結果 3 20

ファイル処理 (入門編)

ファイルを開く (a) fopen("ファイル名", "モード"); 戻り値: 成功したらファイルへのポインタ, 失敗したら NULL. 使用例 FILE *fp; fp = fopen("s:\\a.txt", "rt"); if( fp == NULL ){ perror("ファイルを開けません."); }

ファイル処理例 0a #include <stdio.h> // fopenやNULLなどに必要 #include <stdlib.h> // exit()に必要 int main() { FILE *fp; fp = fopen("S:\\a.txt", "wt"); if ( fp == NULL ) { perror("ファイルを開けません"); exit(1); } fprintf( fp, "Hello, World!\n"); fclose(fp); return 0; ファイルポインタ変数 fpを宣言. FILE *型のfpという名の変数 fopenでファイルを開く. 以後,変数fpが そのファイルを象徴 Open成功なら 非NULL. 失敗ならNULL fpが象徴する ファイルにprintf fcloseで ファイルを閉じる.

ファイルを開く (b) fopen_s(&fp, "ファイル名", "モード"); 戻り値: 成功したら0. 失敗したら0以外. 使用例 FILE *fp; int ret; ret = fopen_s(&fp, "s:\\a.txt", "rt"); if( ret != 0 ){ perror("ファイルを開けません."); }

ファイル処理例 0b #include "stdafx.h" #include <stdlib.h> // exit()に必要 int main() { FILE *fp; int ret; ret = fopen_s( &fp, "S:\\a.txt", "wt"); if ( ret != 0 ) { perror("ファイルを開けません"); exit(1); } fprintf(fp, "Hello, World!\n"); fclose(fp); return 0;

fgetc (1/2) int fgetc(FILE *fp); ファイルfpから1文字読み込む. 戻り値:  正常時 読み込んだ文字の文字コード  失敗時 -1 例えば,ファイルの終端に至り これ以上読み込めない状況で fgetc を行うと,失敗となる.

fgetc (2/2) int ret; ret = fgetc( fp ); if( ret == -1 ){ perror("ファイル読み込み失敗."); exit(1); } else { printf("文字=%c ",ret); printf("文字コード=%d\n", ret); }

#include "stdafx. h" #include <stdlib #include "stdafx.h" #include <stdlib.h> int main() { int ret, ch; FILE *fp; ret = fopen_s(&fp, "S:\\a.txt", "rt"); if( ret != 0) { perror("ファイルを開けません"); exit(1); } while( (ch = fgetc(fp)) != -1 ){ printf("(%c,%d)\n", ch, ch); fclose(fp); return 0; ファイル処理例 1

実行結果 (H,72) (e,101) (l,108) (o,111) (,,44) ( ,10) (W,87) (r,114) (d,100) (!,33) ファイル処理例 1 "S:\a.txt" Hello, World!

#include "stdafx. h" #include <stdlib #include "stdafx.h" #include <stdlib.h> int main(){ int ret, ch, cnt = 0; FILE *fp; ret = fopen_s(&fp, "S:\\a.txt", "rt"); if (ret != 0) { perror("ファイルを開けません"); exit(1); } while( (ch = fgetc(fp)) != -1 ) { if( ch == 'o' ){ //文字aの文字コードは'a' cnt++; fclose(fp); printf("o は %d個ありました.\n", cnt); return 0; ファイル処理例 2

ファイル処理例 2 実行結果 o は 2個ありました. "S:\a.txt" Hello, World!

良くある短縮表記 fp = fopen("S:\\a.txt", "wt"); if( fp == NULL ){ ↓ if( (fp=fopen("S:\\a.txt","wt")) == NULL ) { ret = fopen_s(&fp, "S:\\a.txt", "rt"); if( ret != 0){ if( (fopen_s(&fp,"S:\\a.txt","rt")) != 0 ){