• 検索結果がありません。

ヒントスライドPDF プログラミング演習2 #prog2bkc net

N/A
N/A
Protected

Academic year: 2018

シェア "ヒントスライドPDF プログラミング演習2 #prog2bkc net"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

第1週 ファイル入出力と構造体

プログラミング演習2

(2)

ファイル入出力と構造体 2

習得すること

 復習

変数

配列

 scanf

 ファイル

• fopen,

オープンモード

• fscanf, fprintf

• fclose

 構造体

構造体配列

構造体初期値設定

 ユーザ定義型 typedef

(3)

ファイル入出力と構造体 3

復習:変数

変数

数値や文字を格納する箱のようなもの

型によってサイズが違う – char型:1 バイト – short型:2バイト

– int型:4バイト(環境によって異なる)

1バイト

2バイト

4バイト int main(void){

char c; short s; int num; ...

return 0; }

型名 変数名

(4)

復習:変数

変数

数値や文字を格納する箱のようなもの

型によってサイズが違う – char型:1 バイト – short型:2バイト

– int型:4バイト(環境によって異なる)

1バイト

2バイト

4バイト int main(void){

char c =‘a’; short s = 10;

int num = 100000; ...

return 0; }

型名 変数名

(5)

ファイル入出力と構造体 5

復習:配列

配列

複数の同じ型の変数をまとめたもの

int a[ 4 ];

名前 要素数

(6)

scanf ( 複数の変数の読込み方)

int main(void){ int a, b;

scanf(“%d”,&a); scanf(“%d”,&b); }

int main(void){ int a, b;

scanf(“%d %d”,&a, &b); }

intの場合

文字列の場合

int main(void){

char s1[ 10 ], s2[ 10 ]; scanf(“%s”,s1);

scanf(“%s”,s2); }

int main(void){

char s1[ 10 ], s2[ 10 ]; scanf(“%s %s”,s1, s2); }

文字列以外の変数には&を付ける

(文字列には&は必要ない) 同じ

同じ

2個以上でもまとめることができる

(7)

7

scanf ( 複数の変数の読込み方)

int main(void){ int a;

char s[ 10 ];

scanf(“%d”,&a); scanf(“%s”,s); }

int main(void){ int a;

char s[ 10 ];

scanf(“%d %s”,&a, s); }

intと文字列の場合

同じ

2個以上でもまとめることができる fscanfも同様の記述ができる

(8)

ファイル:ファイルオープン

FILE *fp;

fp = fopen( “indata.data” , ”r” );

ファイルの開き方

fopen( ファイル名”, ”オープンモード” ); オープンモード

“r” :読み出し専用

“w” :書込み専用

(すでにあるファイルはなくなるので注意)

“a” :追加書込み

他にもありますが、

とりあえずこの3つを使えるようにしましょう

ファイルポインタの宣言 注:ポインタは来週学びます

開く 操作 閉じる

(9)

ファイル入出力と構造体 9

ファイル:エラーの確認(ファイルが開けたか?)

fp = fopen(“indata.data”,”r”);

if( fp == NULL ){ //エラーメッセージ //エラー処理

}

if( (fp = fopen(“indata.data”,”r”)) == NULL){ //エラーメッセージ

//エラー処理 }

ファイルが開けなかった場合には fpにはNULLが代入されます

代入時にエラーの確認もできます

printfなどでエラーメッセージを出力 return 1;やexit(1);を使うことが多い

(10)

ファイル:読込み

FILE *fp; int num;

if( (fp = fopen(“indata.data”, ”r”)) == NULL){ //エラーメッセージ

//エラー処理 }

fscanf(fp, “%d”, &num ); ...

ファイルの読込み

fscanf(ファイルポインタ, scanfと同じ形式);

オープンモードを

読込み専用(“r”)にする

開く 操作 閉じる

(11)

ファイル入出力と構造体 11

ファイル入力の終了判定

開く 操作 閉じる

while( fscanf(fp, “%d”, &num ) != EOF){

...

}

ファイルの入力データの終わりの場合は、 fscanf関数では戻り値EOFを返す

EOF(End Of File)

他の終了判定方法は feof関数がある

書式 int feof( FILE* fp )

戻り値 0:ファイル終端ではない 0以外:ファイル終端

(12)

ファイル:ファイルへ出力

FILE *fpout;

if( (fpout = fopen(“outdata.data”, ”w”)) == NULL){ //エラーメッセージ

//エラー処理 }

fprintf(fpout,“Output test.¥n”); ...

ファイルへの出力

fprintf(ファイルポインタ, printfと同じ形式);

オープンモードを

書込み専用(“w”)にする

開く 操作 閉じる

(13)

ファイル入出力と構造体 13

ファイル:ファイルのクローズ

FILE *fp; int num;

if( (fp = fopen(“indata.data”,”r”)) == NULL){ //エラーメッセージ

//エラー処理 }

//ファイルを利用した処理 fclose(fp);

ファイルを閉じる fclose(ファイルポインタ);

ファイル利用後には必ずファイル を閉じる

開く 操作 閉じる

(14)

復習:構造体:構造体とは?

構造体

複数の型の変数をまとめたもの

char name[20]; int age;

struct Person{ char name[20]; int age;

};

struct Person

(15)

ファイル入出力と構造体 15

復習:構造体:構造体の定義

構造体

複数の型の変数をまとめたもの

struct Person{ char name[20]; int age;

};

構造体の定義 struct 構造体名{ 型名 メンバ名; 型名 メンバ名; }; 必要な回数

型名 メンバ名; を繰り返す

構造体内の変数を

構造体のメンバと呼ぶ

(16)

復習:構造体:構造体の宣言

struct Person person;

person.age = 30;

strcpy(person.name,”Takuya Azumi”);

構造体の宣言

struct 構造体名 変数名;

person

(17)

ファイル入出力と構造体 17

復習:構造体:構造体メンバへのアクセス

struct Person person;

person.age = 30;

strcpy(person.name,”Takuya Azumi”);

メンバのアクセス方法 構造体の変数名.メンバ名

person

(18)

復習:構造体:構造体メンバへのアクセス

struct Person person;

person.age = 30;

strcpy(person.name,”Takuya Azumi”);

メンバのアクセス方法 構造体の変数名.メンバ名

person

strcpyは文字列のコピーを行う関数

(19)

ファイル入出力と構造体 19

構造体:構造体の初期化(宣言時)

struct Person person = {“Takuya Azumi”, 30};

person

構造体の初期化

struct 構造体名 変数名 = {値, 値} ; struct Person{

char name[20]; int age;

}; 値の順番はメンバ宣言の順番と同じ

nameに格納 ageに格納

(20)

構造体:構造体配列

構造体も配列にできます

people[ 0 ] people[ 1 ]

struct Person people[ 2 ];

構造体配列の宣言

struct 構造体名 変数名[ 要素数 ];

//構造体配列のアクセスの方法 people[ 0 ].age = 30;

strcpy(people[ 0 ].name,"Takuya Azumi"); people[ 1 ].age = 40;

strcpy(people[ 1 ].name,"Taro Ritsumei");

(21)

ファイル入出力と構造体 21

typedef unsigned int uint; uint data;

構造体:typedef:新しい型名を付ける

typedef struct Person { char name[20];

int age; }PERSON;

typedefの使い方

typedef 型の定義 新しい型名;

PERSON person;

struct Person person;

typedefを利用する場合は、 ここの名前を省略可

どちらも同じ意味になります 新しい型名

(22)

著者リスト

1. 安積 卓也(情報システム学科)

参照

関連したドキュメント

APPLICATION INSTRUCTIONS FOR GRASSY AREAS IN NURSERIES Tide Imidacloprid 2F T&O can be used for the control of the following soil inhabiting pests of grassy areas of nurseries:

社会調査論 調査企画演習 調査統計演習 フィールドワーク演習 統計解析演習A~C 社会統計学Ⅰ 社会統計学Ⅱ 社会統計学Ⅲ.

「AI 活用データサイエンス実践演習」 「AI

卒論の 使用言語 選考要件. 志望者への

国際地域理解入門B 国際学入門 日本経済基礎 Japanese Economy 基礎演習A 基礎演習B 国際移民論 研究演習Ⅰ 研究演習Ⅱ 卒業論文

授業は行っていません。このため、井口担当の 3 年生の研究演習は、2022 年度春学期に 2 コマ行います。また、井口担当の 4 年生の研究演習は、 2023 年秋学期に 2

使用言語 日本語 選考要件. 登録届を提出するまでに個別面談を受けてください。留学中で直接面談 できない場合は Skype か

卒論の 使用言語 選考要件