Download presentation
Presentation is loading. Please wait.
Published byΚῆρες Τοκατλίδης Modified 約 6 年前
1
プログラミング論 ファイル入出力
2
概要 動的変数と静的変数の初期値 実引数と仮引数,値渡しと参照渡し ファイル処理 簡単 本当はものすごく難しいが,本日は簡単.
詳細は プログラミング3 の ポインタ にて ファイル処理 難しくないが,面倒? 慣れが必要
3
動的変数と静的変数の初期値 void main() { int x, y, z; printf("%d\n", x); printf("%d\n", y); printf("%d\n", z); } 実行結果 ↑ゴミが入っている (gcc & Linuxで実行) int x, y, z; void main() { printf("%d\n", x); printf("%d\n", y); printf("%d\n", z); } 実行結果 ↑0クリアされている グローバル変数,静的(static)変数は,自動的に0で初期化される. staticでないローカル変数は,初期化されずゴミが入っている.
4
動的変数と静的変数の初期値 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でないローカル変数は,初期化されずゴミが入っている.
5
動的変数と静的変数の初期値 void main() { int x[3]; printf("%d\n", x[0]); printf("%d\n", x[1]); printf("%d\n", x[2]); } 実行結果 ↑ゴミが入っている 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でないローカル変数は,初期化されずゴミが入っている.
6
実引数 と 仮引数 値渡し と 参照渡し
7
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3;
func(x); printf("%d\n", x); x 100 番地 3
8
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3;
func(x); printf("%d\n", x); x 100 番地 3
9
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3;
func(x); printf("%d\n", x); x a 100 番地 104 番地 3 3 別のメモリに割り当てられた 別の変数
10
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3;
func(x); printf("%d\n", x); x a 100 番地 104 番地 3 7 別のメモリに割り当てられた 別の変数
11
関数の仮引数と実引数(値渡し) void func(int a){ a = 7; } void main(){ int x = 3;
func(x); printf("%d\n", x); x 100 番地 3 実行結果 3
12
関数の仮引数と実引数(値渡し) 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
13
関数の仮引数と実引数(参照渡し) 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
14
関数の仮引数と実引数(参照渡し) 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
15
関数の仮引数と実引数(参照渡し) 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
16
関数の仮引数と実引数(参照渡し) 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
17
関数の仮引数と実引数(参照渡し) 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
18
ファイル処理 (入門編)
19
ファイルを開く (a) fopen("ファイル名", "モード"); 戻り値: 成功したらファイルへのポインタ, 失敗したら NULL. 使用例 FILE *fp; fp = fopen("s:\\a.txt", "rt"); if( fp == NULL ){ perror("ファイルを開けません."); }
20
ファイル処理例 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で ファイルを閉じる.
21
ファイルを開く (b) fopen_s(&fp, "ファイル名", "モード"); 戻り値: 成功したら0. 失敗したら0以外. 使用例 FILE *fp; int ret; ret = fopen_s(&fp, "s:\\a.txt", "rt"); if( ret != 0 ){ perror("ファイルを開けません."); }
22
ファイル処理例 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;
23
fgetc (1/2) int fgetc(FILE *fp); ファイルfpから1文字読み込む. 戻り値:
正常時 読み込んだ文字の文字コード 失敗時 -1 例えば,ファイルの終端に至り これ以上読み込めない状況で fgetc を行うと,失敗となる.
24
fgetc (2/2) int ret; ret = fgetc( fp ); if( ret == -1 ){ perror("ファイル読み込み失敗."); exit(1); } else { printf("文字=%c ",ret); printf("文字コード=%d\n", ret); }
25
#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
26
実行結果 (H,72) (e,101) (l,108) (o,111) (,,44) ( ,10) (W,87) (r,114) (d,100) (!,33)
ファイル処理例 1 "S:\a.txt" Hello, World!
27
#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
28
ファイル処理例 2 実行結果 o は 2個ありました. "S:\a.txt" Hello, World!
29
良くある短縮表記 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 ){
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.