Quản lý Bảng điều khiển với Lớp iostream trong C ++

Managing Console With Iostream Classes C



Trong tin học, bàn điều khiển là bàn phím máy tính và màn hình máy tính. Trước đây, đầu ra được gửi trực tiếp đến màn hình điều khiển chứ không phải cửa sổ hiển thị trên màn hình. Đối với người dùng máy tính thông thường, các ứng dụng ngày nay không sử dụng màn hình một cách rõ ràng. Các ứng dụng này sử dụng các cửa sổ hiển thị trên màn hình. Tuy nhiên, lập trình viên máy tính vẫn cần sử dụng màn hình điều khiển. Mặc dù lập trình viên vẫn cần sử dụng màn hình điều khiển nhưng hệ điều hành không cho phép anh ta làm điều đó. Hệ điều hành cung cấp một cửa sổ mô phỏng màn hình điều khiển. Trong Hệ điều hành Windows, cửa sổ này được gọi là Command Prompt. Trong Hệ điều hành Linux và các biến thể của nó, cửa sổ này được gọi là thiết bị đầu cuối.

Mong rằng người đọc đã biết cách sử dụng Command Prompt hoặc Terminal. Bài viết này giải thích cách đọc các ký tự và chuỗi từ bàn phím và gửi các ký tự và chuỗi đến thiết bị đầu cuối (hoặc dấu nhắc lệnh). Mọi lập trình viên C ++ cần biết trong bài viết này.







Để có đầu vào từ bàn phím và đầu ra tới thiết bị đầu cuối, chương trình phải bắt đầu bằng:



#bao gồm
sử dụng không gian têngiờ;

Nội dung bài viết

Đối tượng dòng hẹp của iostream chuẩn

Lớp iostream, các đối tượng chuẩn, cout, cin, cerr và clog, đã được khởi tạo và đã có trong thư viện chuẩn. Lập trình viên chỉ cần sử dụng chúng mà không cần khởi tạo lại chúng.



Giá cả

Câu lệnh sau trong hàm main () gửi văn bản, Đây là kết quả đầu ra. đến thiết bị đầu cuối:





Giá cả << 'Đây là đầu ra.';

cout là một đối tượng iostream đầu ra trong thư viện chuẩn, đã được khởi tạo.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

Với câu lệnh trên, dấu nhắc lệnh được hiển thị lại xuất hiện ở bên phải của cụm từ đầu ra. Nó không đi đến dòng tiếp theo. endl ở cuối câu lệnh sau sẽ buộc bất cứ thứ gì được in trên màn hình xuống dòng tiếp theo:



Giá cả << 'Đây là đầu ra.' <<endl;

endl là một biến được xác định trước. Nội dung màn hình cũng có thể được buộc phải xuống dòng tiếp theo với:

Giá cả << 'Đây là đầu ra.' << ' ';

Với việc sử dụng ‘ n’, tất cả các dòng văn bản vẫn có thể không xuất hiện trên màn hình ngay lập tức. endl đưa dòng văn bản hoàn chỉnh ra màn hình.

Lưu ý: một chuỗi được gửi đến cout nằm trong dấu ngoặc kép, trong khi một ký tự được gửi trong dấu ngoặc kép. Một loạt các chuỗi và ký tự có thể được gửi trong một câu lệnh, mỗi chuỗi đứng trước<< . All that will appear in one line at the output if ‘ ’ is not in the series.

gin

cin là đối tượng đầu vào iostream chuẩn, đã được khởi tạo và có sẵn trong thư viện chuẩn. Hãy xem xét đoạn mã sau trong hàm main ():

chartxt[năm mươi];
Giá cả << 'Nhập một từ và nhấn Enter:' txt;
Giá cả <<txt<<endl;

Câu lệnh đầu tiên khai báo một mảng trống gồm 50 ký tự. Câu lệnh thứ hai hướng dẫn người dùng nhập một từ trên dòng màn hình tiếp theo và nhấn phím Enter. Lưu ý việc sử dụng 'endl' để buộc người dùng nhập văn bản vào dòng tiếp theo của màn hình. Khi người dùng nhập văn bản, văn bản đã nhập sẽ được lặp lại trên màn hình trong khi nó đi vào đối tượng cin. Sau khi nhấn Enter, câu lệnh thứ ba trong đoạn mã được thực thi. Câu lệnh thứ ba này gửi văn bản đã nhập tới biến, txt. Văn bản đã nhập không được dài hơn 50 ký tự trong trường hợp này. Lưu ý việc sử dụng toán tử trích xuất, >>. Câu lệnh cuối cùng hiển thị văn bản đã nhập trên màn hình.

cin có thể lấy nhiều hơn một từ từ bàn phím, được phân tách bằng dấu cách. Những từ này sẽ phải được trích xuất thành các biến khác nhau. Đoạn mã sau minh họa điều này:

chartxt[hai mươi];
NS;
trôi nổift;
Giá cả << 'Nhập 3 giá trị và nhấn Enter:' txt>>>>ft;
Giá cả <<txt<< '' <<<< '' <<ft<<endl;

Lưu ý tuyên bố:

gin >>txt>>>>ft;

Từ đầu tiên được trích xuất sang txt, từ tiếp theo và từ cuối cùng thành ft. Nếu đầu vào là,

một25 3.6

thì đầu ra của đoạn mã sẽ là,

một25 3.6

chứng nhận

Chương trình sau có lỗi:

#bao gồm
sử dụng không gian têngiờ;

NSchủ chốt()
{
trong myInt;

trở lại 0;
}

Câu lệnh đầu tiên trong hàm main () không đúng. Nếu tên của tệp có mã là temp.cc và tệp thực thi kết quả được gọi là tạm thời, thì lệnh g ++ sau sẽ gửi thông báo lỗi trình biên dịch đến tệp, error.txt:

NS++ -o temp.DC 2>lỗi.txt

Nếu tệp lỗi không tồn tại, tệp sẽ được tạo. Lưu ý phần 2> error.txt của lệnh g ++.

Màn hình là điểm đến đầu ra tiêu chuẩn và nó cũng là điểm đến của lỗi tiêu chuẩn. Nếu 2> error.txt bị bỏ qua khỏi lệnh g ++, thì thông báo lỗi trình biên dịch sẽ được gửi đến đích lỗi chuẩn, vẫn là màn hình (monitor).

Đối tượng luồng đại diện cho đích đầu ra tiêu chuẩn là cout. Đối tượng luồng đại diện cho đích lỗi chuẩn là cerr. Một lỗi thời gian chạy chương trình có thể được gửi đến màn hình như sau:

chứng nhận << 'Thông báo lỗi!' << ' ';

làm tắc nghẽn

Một ứng dụng nhận các đầu vào khác nhau tại các thời điểm khác nhau. Tất cả các đầu vào có thể được hiển thị lại trên màn hình. Tất cả các đầu vào có thể được lưu trong một tệp. Đây là ghi nhật ký. Đích ghi nhật ký tiêu chuẩn là màn hình. Đối tượng luồng ghi nhật ký tiêu chuẩn là một tắc nghẽn. Đoạn mã sau sẽ hiển thị lại văn bản đầu vào ra màn hình:

chartxt[năm mươi];
Giá cả<<'Nhập văn bản và nhấn Enter:'txt;
làm tắc nghẽn<<txt<<endl;

Nếu văn bản đầu vào là 'input_text', thì clog sẽ hiển thị lại 'input_text' ra màn hình.

Trong thực tế, việc ghi nhật ký thường được chuyển hướng đến một tệp. Chương trình sau đây minh họa điều này:

#bao gồm
sử dụng không gian têngiờ;

NSchủ chốt()
{
tự do( 'log.txt','trong',stdout);

Giá cả << 'nhập ký tự' <<endl;
}

Lưu ý việc sử dụng hàm, freopen () và các đối số của nó. Đối số đầu tiên của nó là tên của tệp nhật ký. Nếu tệp không tồn tại, nó sẽ được tạo. Đối số thứ hai của nó là 'w' cho 'write'. Đối số thứ ba của nó là stdout cho đầu ra tiêu chuẩn. Câu lệnh thứ hai trong hàm main () sử dụng cout để gửi văn bản ghi nhật ký đến tệp. Lưu ý: Mã đầu vào thực tế không được hiển thị trong chương trình này.

Lấy các ký tự và chuỗi từ bàn phím

Trong khi người dùng đang nhập đầu vào, các ký tự được gửi đến bộ đệm luồng đầu vào và hiển thị trên màn hình. Khi người dùng nhấn phím Enter, tất cả các ký tự đều nằm trong bộ đệm; đồng thời, con trỏ đi đến đầu dòng tiếp theo bên dưới, trên màn hình. Chương trình sau đó tiếp tục đến câu lệnh chương trình tiếp theo, sau câu lệnh đọc đầu vào.

Đối tượng cin có các phương thức, mà phần này liên quan đến.

Đọc ký tự đầu tiên

get (char_type & c):
Đoạn mã sau đây cho biết cách đọc ký tự đầu tiên, từ bộ đệm luồng đầu vào:

charch;
Giá cả << 'Nhập ký tự:' <<endl;
gin.hiểu được(ch);
Giá cả <<ch<<endl;

Câu lệnh đầu tiên khai báo một ký tự không có phép gán. Câu lệnh thứ hai yêu cầu người dùng nhập một ký tự. Khi người dùng nhập ký tự và nhấn phím Enter, câu lệnh thứ ba sẽ sao chép ký tự từ bộ đệm luồng đầu vào vào biến, ch.

Ngay cả khi người dùng nhập nhiều hơn một ký tự, ký tự đầu tiên sẽ được lấy bởi đoạn mã.

hiểu được():
get () không có đối số, trả về mã ASCII thập phân. Hãy xem xét đoạn mã sau:

Giá cả << 'Nhập ký tự:' <<endl;
Giá cả << gin.hiểu được() <<endl;

Nếu đầu vào là 'asdfg', thì 97 sẽ được trả về, là mã ASCII thập phân cho 'a'.

get (char_type * s, streamize n)

Sau khi người dùng nhập một cụm từ và nhấn phím Enter, một số ký tự bắt đầu từ ký tự đầu tiên có thể được trích xuất từ ​​bộ đệm dòng cin. Có thể sử dụng mã sau:

charP[10];
Giá cả << 'Nhập ký tự:' <<endl;
gin.hiểu được(str,10);
Giá cả <<P<<endl;

Nếu đầu vào là 'những người tuyệt vời', thì đầu ra sẽ là 'người tuyệt vời', gồm 9 ký tự chứ không phải 10. Ký tự NUL chuỗi ( 0) chiếm vị trí thứ mười trong đối số get. Vì vậy, để có 9 ký tự trong str, kích thước lưu trữ của nó phải ít nhất là 10 và đối số get () phải là 11. Nếu toàn bộ dòng đầu vào là mong muốn, thì số lưu trữ chuỗi ít nhất phải là số trong tổng số ký tự được nhập, cộng với 1. Vì vậy, nếu 12 ký tự được nhập cho toàn bộ dòng, thì số phải là 13 cho kích thước lưu trữ chuỗi (str) và 13 cho đối số get (). Lưu ý rằng một khoảng trắng được tính là một ký tự.

get (char_type * s, streamize n, char_type delim)
Có thể trích xuất một chuỗi con, được phân tách ở bên phải, bằng lần xuất hiện đầu tiên của một ký tự cụ thể hoặc theo kích thước luồng của chuỗi con, cái này xuất hiện trước. Nếu văn bản đầu vào cho đoạn mã sau là những người tuyệt vời, thì tuyệt vời sẽ được trích xuất:

charP[30];
Giá cả << 'Nhập ký tự:' <<endl;
gin.hiểu được(str,6,'hoặc');
Giá cả <<P<<endl;

Vị trí thứ sáu từ đầu là ký tự khoảng trắng và nó phân định riêng chuỗi con được trích xuất. Vị trí thứ sáu đứng đầu trước ký tự duy nhất, 'o'. Lưu ý rằng kích thước lưu trữ cho str có thể càng cao càng tốt.

Nếu văn bản đầu vào cho đoạn mã sau là những người tuyệt vời, thì gr sẽ được trích xuất:

charP[30];
Giá cả << 'Nhập ký tự:' <<endl;
gin.hiểu được(str,10,'Và');
Giá cả <<P<<endl;

Lần xuất hiện đầu tiên của 'e', ​​đến trước vị trí thứ mười.

Nhận tất cả các ký tự của một dòng

Sau khi nhấn phím Enter, tất cả các ký tự được nhập vào dòng, có thể được nhận như được hiển thị trong đoạn mã sau:

Giá cả << 'Nhập ký tự:' <<endl;
trong khi (1) {
charch= (char)gin.hiểu được();
Giá cả <<ch;
nếu như (ch== ' ')
nghỉ;
}

Việc ép kiểu với (char), chuyển đổi mỗi số thập phân thành ký tự ASCII tương ứng.

nhìn trộm ()

Các hàm thành viên get () không chỉ đọc ký tự tiếp theo; họ xóa nó khỏi bộ đệm luồng. Tuy nhiên, hàm thành viên peek () đơn giản đọc ký tự tiếp theo (bắt đầu từ ký tự đầu tiên) mà không cần xóa nó khỏi bộ đệm. Trong đoạn mã sau, mỗi ký tự được đọc đầu tiên bằng hàm peek () trước khi bị loại bỏ bởi hàm get (). Tất cả những gì xảy ra sau khi người dùng nhấn phím Enter:

Giá cả << 'Nhập ký tự:' <<endl;
trong khi (1) {
charch= (char)gin.nhìn trộm();
Giá cả <<ch;
gin.hiểu được();
nếu như (ch== ' ')
nghỉ;
}

Nếu các ký tự tiếp theo không bị xóa bởi get (), peek () sẽ chỉ đọc ký tự đầu tiên và vòng lặp sẽ lặp lại vô thời hạn.

Hiển thị và Xóa các ký tự trước khi nhấn Enter

Lưu ý rằng với đối tượng cin, phím Enter phải được nhấn trước khi có hành động. Vâng, các ký tự có thể được hiển thị trong khi nhập và xóa trước khi nhấn phím Enter. Tuy nhiên, điều đó có nghĩa là phải giao tiếp với hệ điều hành. Hệ điều hành khác nhau. Vì vậy, điều này có nghĩa là mã hóa khác nhau cho các hệ điều hành khác nhau. Vì vậy, chủ đề này xứng đáng có một hướng dẫn hoàn toàn khác - xem sau.

Gửi các ký tự và chuỗi tới màn hình

Đối tượng cout là một đối tượng dòng xuất, đã được khởi tạo và hiện diện trong thư viện chuẩn C ++. cout là đối tượng chính được sử dụng để gửi các ký tự và chuỗi đến màn hình. Điều này được thực hiện với toán tử chèn,<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

Các biểu thức dẫn đến kết quả là vô hướng có thể là đối số cho toán tử chèn. Toán tử chuyển đổi vô hướng thành văn bản và đặt văn bản vào luồng đối tượng cout. Khi văn bản được gửi đến đối tượng cout, nó thường xuất hiện trên màn hình (màn hình). Tuy nhiên, đôi khi, nó có thể không xuất hiện ngay lập tức. Để bắt buộc văn bản trên màn hình, hãy chèn giá trị đặc biệt, endl, ngay sau khi chèn văn bản. Điều này sẽ làm cho văn bản được chuyển sang màn hình và một dòng mới sẽ được thêm vào. Lưu ý: ‘ n’ chỉ thêm một dòng mới nhưng không hiển thị văn bản ra màn hình.

Chương trình sau đây chỉ ra cách in các giá trị của int, float và văn bản thông thường, lên màn hình:

#bao gồm
sử dụng không gian têngiờ;

NSchủ chốt()
{
NS= 5;
trôi nổift= 63,5;
Giá cả << 'Các ' <<<< 'các mặt hàng có giá $' <<ft<< ' CHÚNG TA.' <<endl;

trở lại 0;
}

Đầu ra là:

Các5các mặt hàng có giá $63,5CHÚNG TA.

Chương trình sau đây cho biết cách in chuỗi của một đối tượng được khởi tạo từ một lớp:

#bao gồm
sử dụng không gian têngiờ;

cấu trúcNS{
charP[mười một] = 'một vài từ';
}phản đối;

NSchủ chốt()
{
Giá cả <<phản đối.P << ' ';

trở lại 0;
}

Đầu ra là 'một số từ'.

Đối số cho một chương trình C ++

Việc thực thi chương trình bắt đầu từ hàm main (). Hàm main () thực sự có hai tham số tùy chọn. Cú pháp của hàm main () với các tham số tùy chọn, là:

NSchủ chốt(NSargc,char *argv[argc])
{

trở lại 0;
}

Giả sử rằng tên của tệp C ++ thực thi là tạm thời. Giả sử rằng các đối số mà chương trình cần từ môi trường của nó (hệ điều hành), do người dùng nhập, là,

bài viết3bút sách'căn nhà lớn'

Có 5 đối số ở đây: bài báo, 3, cuốn sách, cây bút, và ngôi nhà lớn

Mỗi là văn bản. Đối số được đánh số cho một chương trình là văn bản. Nói cách khác, mỗi đối số là một chuỗi. ngôi nhà lớn được đặt trong dấu ngoặc kép vì nó là một cụm từ. Lệnh đầu cuối để chạy chương trình này sẽ là:

./bài báo tạm thời3bút sách'căn nhà lớn'

Giả sử rằng tệp tạm thời nằm trong thư mục chính. Lưu ý rằng dấu cách và không phải dấu phẩy phân tách các đối số.

Bây giờ, trong cú pháp hàm main (), argc là số đối số của chương trình, cộng với 1. Trong trường hợp này, có 5 đối số cho chương trình. Vì vậy, argc là 6. Trong cú pháp, argv [argc] là một mảng các con trỏ tới chuỗi. Giá trị đầu tiên cho mảng này tại argv [0] được đưa ra bởi trình biên dịch. Nó là một con trỏ đến tên của tệp chương trình. Phần còn lại của các giá trị là con trỏ đến các đối số của chương trình theo thứ tự của người dùng đã nhập vào. Kích thước của mảng này là argc. Trong trường hợp này, kích thước là 1 + 5 = 6.

Giả sử rằng lúc biên dịch, chương trình sau được đặt tên là tạm thời:

#bao gồm
sử dụng không gian têngiờ;

NSchủ chốt(NSargc,char**argv)
{

Giá cả <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

trở lại 0;
}

Lưu ý ở đây, mảng 'char * argv [argc]', đã được khai báo là 'char ** argv'.

Nếu chương trình này được chạy bằng lệnh terminal,

./bài báo tạm thời3bút sách'căn nhà lớn'

thì đầu ra sẽ là:

./tạm thời, bài báo,3, cuốn sách, cây bút, ngôi nhà lớn

Lưu ý rằng đường dẫn thư mục đã được bao gồm với tên của tệp thực thi.

Ngoài ra, lưu ý rằng trong quá trình chạy chương trình (gọi chương trình), giá trị cho argc chưa được gửi.

Phần kết luận

Lớp iostream có bốn đối tượng quan trọng là cout, cin, cerr và clog. cin là một đối tượng đầu vào, trong khi phần còn lại là các đối tượng đầu ra. Trong khi chương trình đang chạy, đầu vào chương trình khác với thời điểm chương trình bắt đầu chạy. Khi một chương trình bắt đầu chạy, đầu vào của chương trình được kết hợp với lệnh để chạy chương trình, được phân tách bằng dấu cách.