/
前回の復習 p rintf をさらに詳しく 前回の復習 p rintf をさらに詳しく

前回の復習 p rintf をさらに詳しく - PowerPoint Presentation

terrificycre
terrificycre . @terrificycre
Follow
342 views
Uploaded On 2020-08-29

前回の復習 p rintf をさらに詳しく - PPT Presentation

出力とは printf の書式指定 書式指定 意味 例 d 整数 小数のついていない数 1 2 3 45 f 実数 小数のついている数 01 10 22 c ID: 810995

printf int main include int printf include main return stdio void char define double fopen text txt fclose null

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "前回の復習 p rintf をさらに詳..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

前回の復習

Slide2

p

rintf

をさらに詳しく

出力とは

Slide3

printf

の書式指定

書式指定

意味

%d

整数

(小数のついていない数)

1, 2,

3,

-45

%f

実数

(小数のついている数)

0.1, 1.0,

2.2

%c

1

'

で囲まれた半角文字

1

個)

'a', 'A'

%s

文字列

"

で囲まれた文字)

"A", "ABC",

"

"

Slide4

とは、変数のカタチ

Slide5

変数

C

言語の変数を詳しく説明します

Slide6

整数型

型の名前

入る値の範囲

サイズ

(ビット数)

int

システムによる

-

unsigned

int

システムによる

-

long

-2147483648

2147483647

32(64)

unsined

long

0

4294967295

32(64)

short

-32768

32767

16

unsined

short

0

65535

16

char

-128

127

8

unsined

char

0

255

8

Slide7

実数型

型の名前

入る値の範囲

サイズ

(ビット数)

float

-3.4×10

38

3.4×10

38

32

double

-1.7×10

308

1.7×10

308

64

Slide8

printf

がややこしい!

printf

%d

%f

%s

128

0.9

"ABC"

とりあえずは

%d

%f

%s

を覚えておく!

Slide9

printf

の表示桁指定

printf

%

全体の桁数

.

 

小数の桁数   

d, f

など

0

を入れると

0

が追加される

%lf

%f

の2倍の小数表現ができる

Slide10

整数(

int

)型とは

0

1

1

0

0

1

0

0

2

7

2

6

2

5

2

4

2

3

2

2

2

1

2

0

128

64

32

16

8

4

2

1

パソコンのメモリ上

64

32

4

100

i

nt

a = 100;

Slide11

浮動小数点

float

)型

とは

正負

小数の桁数

(指数部)

各桁の数値

(仮数部)

パソコンのメモリ上

全体で

32bit

64bit

-5

256

2.56×10

-5

float

a = 0.0000256;

Slide12

固定小数点だと

1

0

0

0

0

0

0

0

.

0

a

=

0

.

0

0

0

0

0

0

0

1

b=

固定

a

+ b

をしたとき

bit

サイズによって

桁落ち

する

bi

t

サイズ

Slide13

文字列とは配列

Slide14

文字型(

1

文字のとき)

文字は

0〜127

の番号の

ASCII

コードで表す

char

-128〜127

の整数だが、

C

言語では文字と文字コード(

0〜127)を同等とみなす'A'は数値の

65と同じである

Slide15

Slide16

文字列(複数文字のとき)

文字列は文字の集まり、

配列

で表す

ダブルクォート

"

文字列、シングルクォート

'

は1文字を表す

c

har s

[6]

の配列で

5

文字を表すことができる

Slide17

文字列は配列

c

har m[6] = "Hello";

‘\0’

NULL

文字

Slide18

日本語は気をつける!

#include <

stdio.h

>

int

main(void){

char a[3] = "

";

char m[11] = "

こんにちは

";

printf

("%s \n", a);

printf

("%s \n", m);

return 0;

}

日本語は全角(

2

バイト)なので、配列の個数は

2倍

になる

Slide19

よく間違える、文字の代入

c

har a = 'A';

a = 'B';

p

rintf

("%c ¥n", a);

c

har a[6] = "Hello";

a = "Good!";

p

rintf

("%s ¥n", a);

文字列をそのまま

代入することはできない

Slide20

実行してみる

①(

strcpy

_s

)

#include <

stdio.h

>

#include <

string.h

>

int

main(void){

char m[

10

] = "Hello";

printf

("%s \n", m);

strcpy_s

(m, 10, "Good bye!");

printf

("%s \n", m);

return 0;

}

strcpy_s

()

を使うためのヘッダファイル

文字列を代入する

ための関数

 

‘\0’

もコピーする

ので文字列a はその分も考えて大きさを宣言すること

Slide21

実行

してみる

(

memcpy

)

#include <

stdio.h

>

#include <

string.h

>

int

main(void){

char m[

10

] = "Hello";

printf

("%s \n", m);

memcpy

(m, "Good bye!", 10);

printf

("%s \n", m);

return 0;

}

memcpy

()

を使うためのヘッダファイル

メモリをコピー

する

ための関数

 

第3引数のバイト数だけのすべての配列をコピーする

Slide22

s

trcpy

_s

’\0’

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

char a[10] = "

abc

\0

def";

char b[10] = "123

\0

456";

strcpy_s

(a, 10, b);

for(int

i

= 0;

i

< 10;

i

++)

printf

("%c", a[

i

]); return 0;}‘\0’NULL文字

Slide23

memcpy

’\0’

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

char a[10] = "

abc

\0

def";

char b[10] = "123

\0

456";

memcpy

(a, b, 10);

for(int

i

= 0;

i

< 10;

i

++)

printf

("%c", a[

i

]);

return 0;

}‘\0’NULL文字

Slide24

どちらも配列をコピーしている

"

abc

\0

def"

"123

\0

456"

a

b

"123

\0

"

"123

\0

456"

a

b

s

trcpy_s

"

abc

\0

def"

"123

\0

456"

a

b

"123

\0

456"

"123

\0 456"abmemcpy

\0まで

指定した個数

すべて

Slide25

s

trcpy_s

memcpy

どちらを使っても良い

‘\0’

をどうするかで判断すること

Slide26

s

trcpy

もあるが

MS

が推奨していない

s

trcpy_s

を使うこと

#define _CRT_SECURE_NO_WARNINGS

があれば使える

Slide27

文字列は配列

c

har m[6] = "Hello";

‘\0’

NULL

文字

何もしなくても文字列を代入すれば

’\0’

はつく!

Slide28

C

言語でいう

s

ize

とは

Slide29

b

it

byte

sizeof

演算子)

1

0

1

0

1

0

1

0

8

ビット=

1

バイト

1

ビット

sizeof

演算子

を使うと、

バイト数

がわかる

Slide30

型の変換

誤>

÷

2の結果を求める

<正>

÷

2の結果を求める

3

整数

/ 2

整数

答え↓ 1(

整数で小数の切り捨て)

3.0(実数) / 2.0

実数

答え↓

1.5

実数

正確な計算をするためには

型を統一しなければならない

Slide31

暗黙の変換

異なる型が現れたときは、

精度の高い型に統一される

Slide32

m

emcpy

のバイトサイズ

Slide33

memcpy

での

バイトサイズ

#include <

stdio.h

>

#include <

string.h

>

int

main(void){

char

m[

10

] = "Hello";

printf

("%s \n", m);

memcpy

(m, "Good bye!",

10

);

printf

("%s \n", m);

return 0;

}

バイトのサイズを入れなければならない

char

1

バイト

i

ntだった場合、システムによってバイトサイズが変わってくる配列の個数でいい

Slide34

i

nt

だった

とき

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

int

m[10] = {11,12,13,14,15,16,17,18,19,20};

int

n[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

memcpy

(m, n,

10 *

sizeof

(int)

);

for (int

i

= 0;

i

< 10;

i

++)

printf

("%d", m[

i

]); return 0;}strcpy_sは文字列専用の関数で、char型でしか使えないシステムに関係なくmemcpyが使える

Slide35

結局

m

emcpy

がやっていること

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

int m[10] = { 11,12,13,14,15,16,17,18,19,20 };

int n[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int

i

= 0;

i

< 10;

i

++)

m[

i

] = n[

i

];

for (int

i

= 0;

i

< 10;

i

++)

printf

("%d", m[i]); return 0;}memcpy

Slide36

キャスト

Slide37

キャスト演算子(明示的変換)

int

float

1

1.0

(float)

型キャスト

Slide38

実行してみる①

#include <

stdio.h

>

int

main(void){

int

a = 3;

int

b = 2;

float f;

f =

(float)

a / b;

printf

("

÷

2=

%f\n", f);

return 0;

}

Slide39

実行してみる②

#include <

stdio.h

>

int

main(void){

printf

("

÷

2=

%f\n", 3 / (float)2);

return 0;

}

Slide40

演算子の優先順位

Slide41

複雑な式になって優先順位が

わからなかったら

適度な位置に

( )

を使う!

Slide42

型の再定義

Slide43

実行してみる

#include <

stdio.h

>

int

main(void) {

typedef

unsigned char

u_char

;

u_char

c;

c = 100;

printf

("%d \n", c);

return 0;

}

Slide44

型の名前を変更する

型の名前は「

unsigned char

」などを組み合わせると、長くなる。そんなとき

typedef

を使うと、任意の名前を付けることができる

typedef

unsigned char

u_char

既存の型名

新しい

型名

自由に名前を付けなおせる

Slide45

マクロ

(

値を定義

)

#

から始まる命令文

#

define

Slide46

不変

の値、定数①

#define

#include <

stdio.h

>

#define PI 3.14

int

main(void) {

int

r = 5;

printf

("%f \n", r * r *

PI

);

return 0;

}

main.c

3.14

に置き換わる

Slide47

不変

の値、定数②

#define

#include <

stdio.h

>

#define PI 3.14

int

main(void) {

int

r = 5;

PI = 3;

printf

("%f \n", r * r * PI);

return 0;

}

main.c

エラーになる

Slide48

#define

の書き方

#define LOOPNUM 10

スペース

セミコロンは

いらない

大文字

セミコロン自体が値になってしまう

Slide49

不変の変数

enum

(定数)①

#include <

stdio.h

>

enum

{

aiu

,

eo

,

kakiku

,

keko

};

int

main(void) {

printf

("%d, %d \n",

aiu

,

eo

);

printf

("%d, %d \n",

kakiku

,

keko

); return 0;}0,1,2…と定数が代入される

Slide50

不変の変数

enum

(定数)②

#include <

stdio.h

>

enum

{

aiu

,

eo

= 5,

kakiku

,

keko

= 6

};

int

main(void) {

printf

("%d, %d \n",

aiu

,

eo

);

printf

("%d, %d \n",

kakiku

,

keko); return 0;}別の定数に代入することもできる

Slide51

マクロ

(関数の詳細は次々回くらいになる)

#

から始まる命令文

#

define

する簡易関数

Slide52

簡易関数①(

#define

#include <

stdio.h

>

#define

HIKU(

x,y

) ((x) - (y))

int

main(void) {

printf

("%d \n",

HIKU(5,3)

);

return 0;

}

main.c

実行してみよう!

Slide53

簡易関数②(

#define

#include <

stdio.h

>

#define

HIKU(

x,y

) ((x) - (y))

int

main(void) {

printf

("%d \n",

HIKU(5+2,1+3)

);

return 0;

}

main.c

実行してみよう!

Slide54

簡易関数③(

#define

#include <

stdio.h

>

#define

HIKU(

x,y

) (x - y)

int

main(void) {

printf

("%d \n",

HIKU(5+2,1+3)

);

return 0;

}

main.c

違いを確認しよう!

Slide55

簡易関数④(

#define

#include <

stdio.h

>

#define PRINTM(X)

printf

("%d\n", X)

int

main(void) {

PRINTM(10);

return 0;

}

main.c

実行してみよう!

Slide56

復習はここまで

Slide57

4.

プログラミング応用

制御と繰り返しと

色々

Slide58

制御文

if

switch

基本的な使い方は

JavaScript

と同じ

プログラムの

流れを変える

制御構造

Slide59

if

条件式

の値が

(1)

ならば、

{ 〜 }

の中の文を処理する」というもの。逆に、

(0)

ならば処理ない。

if(

条件式

){

文(いくつでも)

}

Slide60

int

a = 18;

if(a >= 20){

printf

("%d

20

以上です

\n", a);

}else if(a >= 15){

printf

("%d

15

以上です

\n", a);

}else if(a >= 10){

printf("%d

は10以上です

\n", a);

}else if(a >= 5){

printf

("%d

5

以上です

\n", a);

}else{

printf

("%d

は5より小さいです\n", a);}else ifやelseを使うと以下のようなことができます。

Slide61

プログラムの書き方

プログラムは書き方が必ずしも1つとは

限らない

if

は英語の意味の通り「もし~だったら…する」という

条件分岐

を作る制御文で

ある

条件

が「成り立った場合」と「成り立たなかった場合」の2通りのプログラムの

流れ

を用意することができる

のである。プログラムの流れを必要に応じて変えていくことによって、自分の思うままにプログラムを動かすことが可能にな

る。

Slide62

s

witch

int

num

= 2;

switch(

num

){

case 1:

printf

("

1です

\n");

break;

case 2:

printf

("2です

\n"); break;

case 3:

printf

("

3です

\n");

break;

default:

printf

("

1~3までの数字だけです!

\n");

break;}

Slide63

switch

case

break

default

switch

は複数の

case

という選択肢の中から

式の値に合うもの

(

真)を選び、その処理を実行します。式の値がcaseの

どれにも当てはまらない(偽)ときはdefaultに進みます。

各選択肢の最後にはbreak文を記述し、選択した処理のみを行うようにします。

Slide64

実行してみよう

int

month = 7;

if((month == 12) || (month == 1) || (month == 2)){

printf

("

\n");

}else if((month >= 3) && (month <= 5)){

printf

("

\n");

}else if((month >= 6) && (month <= 8)){

printf

("

\n");}else if((month >= 9) && (month <= 11)){

printf

("

\n");

}else{

printf

("

1から12の値を入力してください

\n");

}

Slide65

制御文は

C

言語も

JavaScript

も同じ

普通に使っていきましょう!

Slide66

繰り返し(反復処理)

for

while

do

while

プログラムの

処理

繰り返す

制御構造

基本的な使い方は

JavaScriptと同じ

Slide67

実行してみよう

int

wa

=0;

int

seki

=1;

for(

int

i

=1;

i

<= 10;

i

++){

wa

+= i

; seki

*=

i

;

}

printf

("

和は

%d

 積は

%d \n",

wa

,

seki

);

Slide68

for

for(

初期化式

;

条件式

;

制御変数の更新

){

処理

}

Slide69

実行してみよう

int

wa

=0;

int

seki

=1;

int

i

=1;

while(

i

<= 10){

wa

+=

i

;

seki *= i

;

i

++;

}

printf

("

和は

%d

 積は

%d \n",

wa

,

seki);実行結果は同じ、forがwhileになっただけ

Slide70

while

while(

条件式

){

処理

}

Slide71

実行してみよう

int

wa

=0;

int

seki

=1;

int

i

=1;

do{

wa

+=

i

;

seki *=

i;

i

++;

} while(

i

<= 10);

printf

("

和は

%d

 積は

%d \n",

wa

,

seki);実行結果は同じ、forがdo~whileになっただけセミコロンを気を付ける

Slide72

do

while

do{

処理

}while(

条件式

)

Slide73

ループの中断

break

 → ループから抜ける

continue

 → ループを1回スキップする

Slide74

for(

int

j=0; j < 3;

j++

){

for(

int

i

=0; i < 3;

i

++){

printf

( "%d + %d = %d \n",

i

, j,

i

+ j);

}

}

for(

int

j=0; j < 3;

j++

){

for(

int

i

=0;

i

< 3;

i++){ if(i + j == 1) break; printf( "%d + %d = %d \n", i , j, i + j); }}

Slide75

for(

int

j=0; j < 3;

j++

){

for(

int

i

=0; i < 3;

i

++){

if(

i

+ j == 1)

continue;

printf

( "%d + %d = %d \n",

i

, j,

i

+ j);

}

}

for(

int

j=0; j < 3;

j++

){

for(

int

i=0; i < 3; i++){ if(i + j == 1) break; printf( "%d + %d = %d \n", i , j,

i + j);

}

}

Slide76

すべてのループから抜け出す場合は

以下のようにします。

このように

ラベル(

label

を指定

して

goto

することで外側のループも抜け出すことができます。

ラベルの名前も変数と同じように自分で好きに命名できます。

for(

int

j=0; j < 3;

j++

){

for(

int

i

=0;

i

< 3;

i

++){

if(

i

+ j == 1)

goto

label;

printf

( "%d + %d = %d \n", i , j, i + j); }}label:

Slide77

繰り返しも

C

言語と

JavaScript

は同じ

goto

文だけ気を付ける

Slide78

関数群

Slide79

math.h

の数学関数を使う

使い方

働き

意味

int

n =

abs

(m);

整数の絶対値

n = |m|

double a =

fabs

(x);

実数の絶対値

a = |x|

double a =

sqrt

(x);

平方根a =

√x

double a = exp(x);eの指数

a = e

x

double a =

log

(x);

自然対数

a = log x

double a =

log10

(x);

常用対数

a = log

10

x

Slide80

使い方

働き

意味

double a =

pow

(x, y);

べき乗

a =

x

y

double a =

sin

(x);

サイン

a = sin x

double a =

cos

(x);

コサイン

a = cos x

double a = tan(x);

タンジェントa = tan xdouble a =

ceil

(x);

小数切り上げ

実数

x

を切り上げ

double a =

floor

(x);

小数切り捨て

実数

x

を切り捨て

double a = rint(x);四捨五入実数xを四捨五入

Slide81

実行してみる

#include <

stdio.h

>

#include <

math.h

>

int

main(void){

printf

("%d, %f \n", abs(-123), fabs(-0.123));

printf

("%f, %f \n", sqrt(2.0), exp(1.0));

printf

("%f, %f \n", log(2.7), log10(100.0));

return 0;

}

絶対に

必要

Slide82

実行してみる②

#include <

stdio.h

>

#include <

math.h

>

int

main(void){

printf

("%f \n", pow(2,3));

printf

("sin30° = %f \n", sin(30 * 3.14 / 180));

printf

("cos60° = %f \n", cos(60 * 3.14 / 180));

printf

("tan90° = %f \n", tan(90 * 3.14 / 180));

return 0;

}

気を付ける

Slide83

実行してみる③

#include <

stdio.h

>

#include <

math.h

>

int

main(void){

double a = 1234.5678;

printf

("%f \n", ceil(a));

printf

("%f \n", floor(a));

printf

("%f \n",

rint

(a));

printf

("%d \n", (int)a);

return 0;

}

気を付ける

Slide84

time.h

の時間関数を使う

#include <

stdio.h

>

#include <

time.h

>

int

main(void){

printf

("%

lld

\n", time(NULL));

printf

("%

lld

\n", time(NULL)/60/60/24/365);

return 0;

}

絶対に

必要

NULL

に気を付ける

実行すると

1970

1

1

日0時0分0秒から計った現在の時間を秒単位で返す

Slide85

疑似

乱数

rand()

を使う

#include <

stdio.h

>

#include <

stdlib.h

>

int

main(void){

printf

("%d \n", rand());

printf

("%d \n", rand()%10 + 1);

return 0;

}

絶対に

必要

Slide86

あれれ? おかしいな

#include <

stdio.h

>

#include <

stdlib.h

>

int

main(void){

for(

int

i

=0;

i

< 10;

i

++)

printf

("%d \n", rand()%10 + 1);

return 0;

}

何度も実行してみるとすべて

結果が

同じ

F5

を連打してみる)

Slide87

乱数表を再設定する

srand

()

#include <

stdio.h

>

#include <

stdlib.h

>

#include <

time.h

>

int

main(void){

srand

(time(NULL));

for(

int

i

=0;

i

< 10;

i

++)

printf

("%d \n", rand()%10 + 1);

return 0;

}

何度実行して

もランダム!

追加する

Slide88

ファイル操作

Slide89

ファイルを扱う手順

ファイルポインタ

を宣言

対象のファイルを開き、

ファイルポインタ

を得る

ファイルポインタ

を通して

読み書き

する

操作が終わったら、ファイルを閉じる

Slide90

ファイルポインタ

FILE *

fp

;

ポインタとして宣言

する

このファイルポインタはファイルを扱うための識別子として使うだけなので、

通常のポインタ特有の使い方はできない

ので注意する

Slide91

ファイルの開閉

以下のプログラムを実行してみてください。

#include <

stdio.h

>

int

main(void) {

FILE *

fp

;

fp

=

fopen

("text.txt", "w");

fclose

(

fp

);

return 0;

}

中身がカラッポな

text

というテキストファイルができる

Slide92

fopen

関数の意味

fp

=

fopen

(

"text.txt", "w"

);

ファイルポインタ

*

はつけない

ファイル名

モード

Slide93

モードとは?

モードの文字列

目的

ファイルがないとき

r

読み込み

失敗

r+

読み書き

失敗

w

書き込み

空ファイルを作る

w+

読み書き

空ファイルを作る

a

追加書き込み

ないときだけ作る

a+

読み書き

ないときだけ作る

Slide94

fclose

は必要?

一見、無意味な

fclose

関数だがしっかりとした役割がある。

f

open

でファイルを

オープン

にするとき、

他の

プログラムで勝手に読み書きされないように

プロテクトがかかっている

f

closeでファイルをクローズすることで、そのプロテクトが外れる

。fclose関数を使って初めてファイルに書き込むことで処理の高速化

をしている。

Slide95

ファイルへの書き込み

#include <

stdio.h

>

int

main(void) {

FILE *

fp

;

fp

=

fopen

("text.txt", "w");

fprintf

(

fp

, "Hello, World!");

fclose

(

fp

);

return 0;

}

text

というテキストファイルに

Hello, World!

が書き込まれる

Slide96

printf

のように

使える

#include <

stdio.h

>

int

main(void) {

int

i

= 100;

FILE *

fp

;

fp

=

fopen

("text.txt", "w");

fprintf

(

fp

, "%d",

i

);

fclose

(

fp

);

return 0;

}textというテキストファイルに変数iの値が書き込まれる

Slide97

普通に

printf

のように

使える

#include <

stdio.h

>

int

main(void) {

double

i

= 0.005;

FILE *

fp

;

fp

=

fopen("text.txt", "w");

fprintf

(

fp

, "%.7f",

i

);

fclose

(

fp

);

return 0;}textというテキストファイルに実数も書き込める

Slide98

"a"

の追加書き込み

#include <

stdio.h

>

int

main(void) {

double

i

= 0.005;

FILE *

fp

;

fp

=

fopen

("text.txt", "

a

");

fprintf

(

fp

, "%.7f",

i

);

fclose

(

fp

); return 0;}実行するたびにファイルに書き加えられる

Slide99

ファイルの読み込み

#include <

stdio.h

>

int

main(void) {

int

i

;

FILE *

fp

;

fp

=

fopen

("text.txt", "

r

");

fscanf

(

fp

, "%d", &

i

);

fclose

(

fp

);

printf("%d \n", i); return 0;}textというテキストファイルの整数が読み込まれる

Slide100

モードが

"r"

のときの注意

fp

=

fopen

("

aaa

.txt", "

r

");

このときファイルが

存在しないと

fp

=

NULL

;

オープンできなかった場合は

プログラムを終了させる

Slide101

ファイル

の読み込み(

定型)

#include <

stdio.h

>

int

main(void) {

int

i

;

FILE *

fp

;

fp

=

fopen

("text.txt", "r");

if(

fp

== NULL)

return 0;

fscanf

(

fp

, "%d", &

i

);

fclose(fp); printf("%d \n", i); return 0;}追加する

Slide102

scanf

のように

使える

#include <

stdio.h

>

int

main(void) {

char

st

[20];

FILE *

fp

;

fp

=

fopen

("text.txt", "r");

if(

fp

== NULL)

return 0;

fscanf

(

fp

, "%s", &

st

);

fclose(fp); printf("%s \n", st); return 0;}

Slide103

スペースで読み込みが終了する

#include <

stdio.h

>

int

main(void) {

char

st

[20];

FILE *

fp

;

fp

=

fopen

("text.txt", "r");

if(

fp

== NULL)

return 0;

fscanf

(

fp

, "%s", &

st

);

fclose

(

fp); printf("%s \n", st); return 0;}テキストファイルの中身を変更して実行してみるThey are students.test.txtTheyしか表示されない

Slide104

1行ずつ読み込む

#include <

stdio.h

>

int

main(void) {

char

st

[20];

FILE *

fp

;

fp

=

fopen

("text.txt", "r");

if(

fp

== NULL)

return 0;

fgets

(

st

, 19,

fp

);

fclose

(

fp); printf("%s \n", st); return 0;}They are students.test.txt1行ぶんの文字列が出力される

Slide105

fgets

関数の意味

fgets

(

st

, 19,

fp

);

格納用の文字配列

読み込み最大数

ファイルポインタ

\0

」が最後に入る

ので

-1

になっている

\n

」も格納される

Slide106

ファイルを最後まで読み込む

#include <

stdio.h

>

int

main(void) {

char

st

[20];

FILE *

fp

;

fp

=

fopen

("text.txt", "r");

if(

fp

== NULL)

return 0;

while(1){

fgets

(

st

, 19,

fp

);

if(

feof

(fp)) break; printf("%s", st); } fclose(fp); return 0;}abcdefghijklmnopqrstuvwxyztest.txtファイルが終端のときtrueになる

Slide107

今週はここまで

何か質問はありませんか?

Related Contents


Next Show more