1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng Kỹ thuật lập trình hệ cơ điện tử: Chương 8 - TS. Đặng Thái Việt

43 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 1,11 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Kỹ thuật lập trình hệ cơ điện tử: Chương 8 - Vào ra trong C được biên soạn bao gồm các nội dung chính sau: Vào ra chuẩn – getchar và putchar; In ra theo khuôn dạng; Nhập vào theo khuôn dạng; Chuyển dạng trong bộ nhớ; Xử lý tệp; Một số hàm tiện ích. Mời các bạn cùng tham khảo bài giảng!

Trang 1

K  THU T L P TRÌNH H  C  ĐI N  Ỹ Ậ Ậ Ệ Ơ Ệ TỬ

Trang 2

1. T ng quan v  ngôn ng  l p trìnhổ ề ữ ậ

2. Gi i thi u s  b  ngôn ng  Cớ ệ ơ ộ ữ

3. Ki u, toán t  và bi u th c ể ử ể ứ

Trang 4

Vào ra chu n – getchar và putchar

1 Vào ra chuẩn – getchar và putchar

- Mỗi tệp gốc có tham trỏ tới hàm thư viện chuẩn đều phải chứa:

Thư viện chuẩn

- Vị trí ở chỗ bắt đầu chương trình

- Tệp stdio.h định nghĩa các macro và biến cùng các hàm

Trang 5

Vào ra chu n – getchar và putchar

Hàm getchar ()

- Cơ chế vào đơn giản nhất là đọc từng ký tự từ thiết bị vào chuẩn, nói chung là bàn phím và màn hình của người sử dụng, bằng hàm getchar()

- Dùng câu lệnh sau : biến = getchar();

Nhận một ký tự vào từ bàn phím và không đưa ra màn

hình Hàm sẽ trả về ký tự nhận được và lưu vào biến

Ví dụ:

Trang 6

Vào ra chu n – getchar và putchar

Hàm putchar ()

- Để đưa một ký tự ra thiết bị ra chuẩn, nói chung là màn hình, ta sử dụng hàm putchar()

- Dùng câu lệnh sau : putchar(ch);

Đưa ký tự ch lên màn hình tại vị trí hiện tại của con trỏ Ký

tự sẽ được hiển thị với màu trắng

Ví dụ:

Trang 7

Khi gõ một ký tự thì hàm nhận ngay ký tự đó ( không cần bấm thêm phím Enter như trong các hàm nhập khác ) Ký

tự vừa gõ không hiện lên màn hình

Ví dụ:

Trang 8

Vào ra chu n – getchar và putchar

Hàm putch()

- Đưa ký tự “ch” lên màn hình tại vị trí hiện tại của con trỏ

Ký tự sẽ được hiển thị theo màu xác định trong hàm textcolor Hàm cũng trả về ký tự được hiển thị

- Dùng câu lệnh sau : putch(ch);

Trang 9

Đ a k t qu  lên màn hình ư ế ả

2 Đưa kết quả lên màn hình

Hàm printf(điều khiển, đối số 1, đối số 2, )

- Hàm printf chuyển, tạo khuôn dạng và in các đối của nó ra thiết bị ra chuẩn dưới sự điều khiển của xâu điều

khiển Xâu điều khiển chứa hai kiểu đối tượng: các ký tự thông thường, chúng sẽ được đưa ra trực tiếp thiết bị ra, và các đặc tả chuyển dạng, mỗi đặc tả sẽ tạo ra việc đổi dạng

và in đối tiếp sau của printf

Trang 10

Đ a k t qu  lên màn hình ư ế ả

Chuỗi điều khiển có thể có các ký tự điều khiển

- \n sang dòng mới

- \f sang trang mới

- \b lùi lại một bước

- \t dấu tab

- Dạng tổng quát của đặc tả :

%[-][fw][.pp] ký tự chuyển dạng

Trang 11

Đ a k t qu  lên màn hình ư ế ả

- Khi không có dấu trừ thì kết quả ra

được dồn về bên phải nếu độ dài

thực tế của kết quả ra nhỏ hơn độ

rộng tối thiểu fw dành cho nó Các vị

trí dư thừa sẽ được lấp đầy bằng các

khoảng trống Riêng đối với các

trường số, nếu dãy số fw bắt đầu

bằng số 0 thì các vị trí dư thừa bên

trái sẽ được lấp đầy bằng các số 0

- Khi có dấu trừ thì kết quả được dồn

về bên trái và các vị trí dư thừa về

bên phải ( nếu có ) luôn được lấp

đầy bằng các khoảng trống

Trang 12

Đ a k t qu  lên màn hình ư ế ả

- Khi fw lớn hơn độ dài thực tế của kết quả ra thì các vị trí

dư thừa sẽ được lấp đầy bởi các khoảng trống hoặc số 0

và nội dung của kết quả ra sẽ được đẩy về bên phải hoặc bên trái

Trang 13

Đ a k t qu  lên màn hình ư ế ả

• pp:

- Tham số pp chỉ được sử dụng khi đối tương ứng là một xâu ký tự hoặc một giá trị kiểu float hay double

- Trong trường hợp đối

tương ứng có giá trị kiểu

float hay double thì pp là

Trang 14

Ký t  chuy n d ng ự ể ạ

3 Ký tự chuyển dạng

- Ký tự chuyển dạng là một hoặc một dãy ký hiệu xác định quy tắc chuyển dạng và dạng in ra của đối tương ứng Như vậy sẽ có tình trạng cùng một số sẽ được in ra theo các dạng khác nhau

- Cần phải sử dụng các ký tự chuyển dạng theo đúng qui tắc định sẵn

- Mọi dãy ký tự không bắt đầu bằng % hoặc không kết thúc bằng ký tự chuyển dạng đều được xem là ký tự hiển thị

Trang 15

Ký t  chuy n d ng ự ể ạ

Trang 16

Ký t  chuy n d ng ự ể ạ

Ví dụ:

Trang 17

tự vv ) rồi lưu trữ nó vào bộ nhớ theo các địa chỉ xác định.

- scanf(điều khiển,đối 1, đối 2, );

%[*][d d]ký tự chuyển dạng

- dấu * nói lên rằng trường vào vẫn được dò đọc bình

thường, nhưng giá trị của nó bị bỏ qua ( không được lưu

vào bộ nhớ ) Như vậy đặc tả chứa dấu * sẽ không có đối tương ứng

Trang 19

Nh p vào theo khuôn d ng ậ ạ

Ký tự chuyển dạng:

- Ký tự chuyển dạng xác định cách thức dò đọc các ký tự trên dòng vào cũng như cách chuyển dịch thông tin đọc đựợc trước khi gán nó cho các địa chỉ tương ứng

- Cách dò đọc thứ nhất là đọc theo trường vào, khi đó các khoảng trắng bị bỏ qua Cách này áp dụng cho hầu hết các trường hợp

- Cách dò đọc thứ hai là đọc theo ký tự, khi đó các khoảng trắng cũng được xem xét bình đẳng như các ký tự khác Phương pháp này chỉ xảy ra khi ta sử dụng một trong ba ký

tự chuyển dạng sau : C, [ dãy ký tự ], [^ dãy ký tự ]

Trang 20

Nh p vào theo khuôn d ng ậ ạ

Trang 22

Nh p vào theo khuôn d ng ậ ạ

Đưa kết quả ra máy in:

- Để đưa kết quả ra máy in ta dùng hàm chuẩn fprintf có dạng sau

- Tham số stdprn xác định thiết bị đưa ra là máy in

Điều khiển có dạng đặc tả như lệnh printf

Dùng giống như lệnh printf, chỉ khác là in ra máy in

Trang 23

ofstream <Tên biến tệp>(<Tên tệp tin>, ios::out);.

- Ghi dữliệu vào tệp bằng thao tác “<<”:

<Tên biến tệp> <<<Dữliệu>;

- Đóng tệp tin bằng lệnh close():

<Tên biến tệp>.close();

Trang 24

X  lý t p ử ệ

Trang 27

X  lý t p ử ệ

Trang 28

X  lý t p ử ệ

- Minh hoạ việc copy toàn bộ nội dung của một tệp tin sang một tệp tin mới:

Trang 29

X  lý t p ử ệ

Trang 30

X  lý t p ử ệ

5.2 Vào ra tệp nhị phân bằng read và

write

Ghi vào tệp nhị phân bằng write.

- Mở tệp tin theo chế độ để ghi nhị phân bằng đối tượng

fstream:

fstream <Tên biến tệp>(<Tên tệp tin>, ios::out|ios::binary);

- Ghi dữliệu vào tệp bằng thao tác “write()”:

<Tên biến tệp>.write(char* <Dữliệu>,

int <Kích thước dữliệu>);

- Đóng tệp tin bằng lệnh close():

Trang 31

X  lý t p ử ệ

- Thao tác write nhận hai tham số đầu vào như sau:

- Tham số thứ nhất là con trỏ kiểu char trỏ đến vùng dữ liệu cần ghi vào tệp Vì con trỏ bắt buộc có kiểu char nên khi muốn ghi dữ liệu có kiểu khác vào tệp, ta dùng hàm chuyển kiểu:

reinterpret_cast<char *>(<Dữliệu>);

- Tham sốthứhai là kích cỡ dữ liệu được ghi vào tệp Kích

cỡ này được tính theo byte, nên thông thường ta dùng toán tử:

sizeof(<Kiểu dữliệu>);

Trang 32

X  lý t p ử ệ

Đọc dữ liệu từ tệp nhị phân bằng read.

- Mở tệp tin theo chế độ để đọc nhị phân bằng đối tượng fstream (mở tệp tin chỉ để ghi):

fstream <Tên biến tệp>(<Tên tệp tin>, ios::in|ios::binary);

- Đọc dữ liệu từ tệp bằng thao tác “read()”:

<Tên biến tệp>.read(char* <Dữliệu ra>,

int <Kích thước dữliệu>);

- Đóng tệp tin bằng lệnh close():

<Tên biến tệp>.close();

Trang 33

6 Truy nhập tệp trực tiếp

6.1 Con trỏ tệp tin

• Con trỏ tệp tin có vai trò như một đầu đọc trỏ vào một vị trí xác định của tệp và thao tác truy nhập tệp diễn ra tuần tự

- Tại mỗi thời điểm, con trỏ tệp tin xác định một vị trí trên tệp mà tại đó, thao tác truy nhập tệp (đọc/ghi) được thực hiện

- Sau thao tác truy nhập, con trỏ tệp tự động chuyển đến vị trí tiếp theo dựa vào kích thước đơn vị dữ liệu được truy nhập

Trang 34

Truy nh p t p tr c ti p ậ ệ ự ế

• Cách truy nhập tệp tuần tự có nhược điểm là bao giờ cũng phải bắt đầu từ đầu tệp tin, đi tuần tự cho đến vị trí cần truy nhập Khi tệp tin có kích thước lớn thì cách truy nhập này rất tốn thời gian

• C++ cho phép truy nhập trực tiếp đến một vị trí xác định trên tệp tin bằng các phép toán:

- Truy nhập vị trí hiện tại của con trỏ tệp tin

- Dịch chuyển con trỏ tệp tin đến một vị trí xác định

Trang 35

Truy nh p t p tr c ti p ậ ệ ự ế

6.2 Truy nhập vị trí hiện tại của con trỏ

tệp

- Nếu biến tệp là kiểu mở tệp để đọc ifstream thì cú pháp là:

<Tên biến tệp>.tellg();

- Nếu biến tệp là kiểu mở tệp để ghi ofstream thì cú pháp là:

<Tên biến tệp>.tellp();

Trang 36

Truy nh p t p tr c ti p ậ ệ ự ế

Trang 37

Truy nh p t p tr c ti p ậ ệ ự ế

Trang 38

Truy nh p t p tr c ti p ậ ệ ự ế

6.3 Dịch chuyển con trỏ tệp

• Ngoài việc xác định vị trí hiện thời của con trỏ tệp, C++ còn cho phép dịch chuyển con trỏ tệp đến một vị trí bất kì trên tệp Cú pháp dịch chuyển phụ thuộc vào kiểu biến tệp là đọc hay ghi

- Nếu biến tệp có kiểu là mở tệp tin để đọc ifstream, cú pháp sẽ :

<Tên biến tệp>.seekg(<Kích thước>, <Mốc dịch chuyển>);

- Nếu biến tệp có kiểu là mở tệp để ghi ofstream, cú pháp

sẽ là:

Trang 39

Truy nh p t p tr c ti p ậ ệ ự ế

với vị trí mốc dịch chuyển Đơn vị tính của kích thước là byte, có kiểu là số nguyên

dịch chuyển của con trỏ tệp Có ba tham số hằng về kiểu mốc dịch chuyển:

- ios::beg: Mốc dịch chuyển là đầu tệp tin

- ios::cur: Mốc dịch chuyển là vị trí hiện thời của con trỏ tệp

- ios::end: Mốc dịch chuyển là vị trí cuối cùng của tệp tin

Trang 41

Truy nh p t p tr c ti p ậ ệ ự ế

Trang 42

Truy nh p t p tr c ti p ậ ệ ự ế

Trang 43

Truy nh p t p tr c ti p ậ ệ ự ế

Ngày đăng: 26/01/2023, 17:31

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm