Các bỏ dùng lệnh system("pause")

3,279 views
Skip to first unread message

Vũ Văn Quyết

unread,
Feb 14, 2012, 7:48:39 AM2/14/12
to int2202ap
Hôm nay trong giờ thực hành tớ thấy code của nhiều bạn có câu lệnh
này.
Thực ra đây là một lệnh của DOS. Không tin các bạn thử vào cmd gõ vài
lệnh gì đó. Rồi gõ pause thì nó dừng màn hình chờ khi ta gõ một phím
bất kỳ.
Vì vậy ta không thể dùng câu lệnh đó để lập trình C++ trên các hệ
điều hành khác được như Linux chẳng hạn.
Ta có thể thay câu lệnh đó bằng cách thêm tập tin tiêu đề
#include<stdlib.h>
Rồi thay system("pause");
bằng
fflush(stdin);
getchar();

Mong các bạn cho ý kiến

Quan Le Thuong

unread,
Feb 14, 2012, 7:53:30 AM2/14/12
to int2202ap
Mình luôn dùng hàm system("pause");, kể cả khi học C,mình đã tìm hiểu
qua lệnh này rồi,
[QUOTE]
system() là hàm thuộc C, trong thư viện stdlib.h
nó còn chuẩn hơn cả hàm getch()
[/QUOTE]
dùng system("pause"); là "đúng đắn" ;))

Trần Thành Núi

unread,
Feb 14, 2012, 8:02:06 AM2/14/12
to int2202ap
mình cũng nghĩ là dùng lệnh này ko có gì là sai cả, trong C và C++ đều
có thể dùng mà không cần khai báo thêm thư viện

Quan Le Thuong

unread,
Feb 14, 2012, 8:03:29 AM2/14/12
to int2202ap
Hờ, có lẽ mình hơi vội vàng nên đưa ra thông tin sai lệch,;))
Mình quen dùng rồi ;)),,mọi người có thể qua đây để xem bài "vì sao
nên tránh sử dụng system("pause");
http://www.gidnetwork.com/b-61.html

don...@vnu.edu.vn

unread,
Feb 14, 2012, 8:05:59 AM2/14/12
to int2202ap
minh cung nghi la nen dung lenh system().moi vao dau thuc hanh tin4
minh cung dung lenh getch().nhung toi luc thay thuc hanh huong dan cho
dung system() thich hon han vi no khong nam trong thu vien nao ca voi
lai dung cung don gian hon cau lenh ban vua neu

On Feb 14, 8:48 pm, Vũ Văn Quyết <quyetvv...@vnu.edu.vn> wrote:

Thành Nguyễn

unread,
Feb 14, 2012, 8:09:38 AM2/14/12
to int2202ap
Tớ nhớ là hình như hồi còn học tin 4 thì thầy giáo tớ bảo
là bản chất của lệnh getchar() là dừng màn hình để chờ
nhập thêm 1 phím bất kỳ
->> hay bị lỗi gì đó... không nhớ nữa.
Tớ thì vẫn hay dùng lệnh system("pause");
nếu không thì mở cái file abcd.exe bằng DOS cũng được. ->
không cần system("pause");

Bùi Quý

unread,
Feb 14, 2012, 9:46:26 AM2/14/12
to int2202ap
Thực tế là toàn dùng system("pause") nhưng đọc qua một số bài viết thì
thấy người ta không khuyến khích dùng nó
http://www.gidnetwork.com/b-61.html
Thấy bảo thay system("pause") bằng cin.get(), nhưng thử thì chương
trình không dừng lại. Không biết tại sao nữa ?

Thanh Nguyen

unread,
Feb 14, 2012, 10:18:36 AM2/14/12
to int2202ap
Theo như mình hiểu thì người ta khuyến cáo không dùng lệnh
system("pause") giống như không nên giết gà dùng dao mổ trâu ấy
Khi gọi một lệnh của hệ thống thì hệ thống sẽ phải làm nhiều việc hơn
như Trì hoãn chương trình của bạn; Mở thư viện lệnh của hệ thống; Tìm
lệnh Pause trong đấy; Phân bố bộ nhớ để thực hiện lệnh pause; Thực
hiện lệnh pause và chờ người ta ấn phím; Phân bố lại bộ nhớ; Đóng thư
viện lệnh và.... Tiếp tục chương trình của bạn;
Nếu trong một chương trình lớn, hoặc là yêu cầu nghiêm ngặt về thời
gian thì rất có thể lệnh system("pause") sẽ ảnh hưởng lớn đến thời
gian thực hiện chương trình hay tính hiệu quả của chương trình của
bạn.
Nhưng mình nghĩ với mấy bài thực hành trên lớp thì dùng
system("pause") cho tiện :))

Còn lệnh cin.get() là đọc 1 ký tự bất kỳ (kể cả phím cách) - tương tự
readkey trong pascal. Trước khi dùng lệnh này bạn nên có fflush(stdin)
vì nếu bên trên có phần nhập dữ liệu thì sẽ thừa ra ký tự enter (13)
nên chương trình sẽ không dừng lại khi dùng cin.get().

Hi vọng bài viết của mình có ích với các bạn :D

Thanh Nguyen

unread,
Feb 14, 2012, 10:23:06 AM2/14/12
to int2202ap
Theo http://www.gidnetwork.com/b-61.html thì system("pause") chỉ dùng
được với hệ thống có lệnh PAUSE :)) như windows hay dos của bác gate,
trong các hệ điều hành khác (Linux, Android, v.v...) nếu không có lệnh
PAUSE thì chương trình sẽ không dừng.

Quan Le Thuong

unread,
Feb 15, 2012, 3:02:30 AM2/15/12
to int2202ap
Mọi người có thể dùng getchar(); thay vì dùng cin.get ;))
Mình vẫn thấy lưu luyến em system("pause") ;))

Bùi Quý

unread,
Feb 15, 2012, 4:39:20 AM2/15/12
to int2202ap
Nói chung, trong C thì dùng getchar(); còn C++ thì dùng cin.get();
Nhân tiện, mọi người nghĩ sao về cin.ignore(); ?

Quan Le Thuong

unread,
Feb 15, 2012, 7:57:27 AM2/15/12
to int2202ap
c++ getchar(); đc mà bé ;))

don...@vnu.edu.vn

unread,
Feb 15, 2012, 8:25:08 AM2/15/12
to int2...@googlegroups.com
> Nói chung, trong C thì dùng getchar(); còn C++ thì dùng cin.get();
> Nhân tiện, mọi người nghĩ sao về cin.ignore(); ?
theo mình tham khảo thì câu lệnh cin.ignore() mà bạn đưa ra có tác dụng xóa đi n kí tự trong bộ
đệm của máy. nghĩa là ta phải biết rõ bộ đệm của máy có bao nhiêu kí tự. Nếu trong trường hợp
không biết còn bao nhiêu kí tự thì như thế là không hiệu quả. tốt nhất là vẫn dung bộ
fflush(stdin); cin.get();

Chiến Nguyễn

unread,
Feb 15, 2012, 8:58:11 PM2/15/12
to int2202ap
cin.ignore() dùng để xóa bộ nhớ đệm, lúc nhập xâu cùng với nhập các
kiểu dữ liệu khác liền nhau mình hay dùng cái này, trong C trước hình
như là fflush(stdin); thì phải.
Mình nghĩ là nên dùng vì C++ Hướng đối tượng cần cái nhiều cái này

Nguyễn MInh Hiệp

unread,
Feb 16, 2012, 12:04:08 AM2/16/12
to int2202ap
Em dung getch() ko dung xoa bo dem co thay lam rang dau cac bac

Quan Le Thuong

unread,
Feb 16, 2012, 2:29:42 AM2/16/12
to int2202ap
Đề nghị mọi người viết tiếng việt có dấu

Trần Thành Núi

unread,
Feb 16, 2012, 5:47:56 AM2/16/12
to int2202ap
đã không dấu mà hình như còn là tiếng miền trong nữa hay sao ấy @@
.
cô yêu cầu là dùng fflush(stdin) và cin.get; nếu dùng getch() thì chả
phải khai báo thêm thư viện <conio.h> à. rắc rối, bớt đc ít nào hay ít
đấy @@

On 15 Tháng Hai, 21:04, Nguyễn MInh Hiệp <hiepnm...@vnu.edu.vn>
wrote:

Quan Le Thuong

unread,
Feb 16, 2012, 7:32:20 AM2/16/12
to int2202ap
có phải khai báo conio.h đâu babe ^^

Hoàng Văn Phụng

unread,
Feb 16, 2012, 7:55:09 AM2/16/12
to int2202ap
getch() nằm trong thư viện conio.h mà

Quan Le Thuong

unread,
Feb 16, 2012, 8:06:51 AM2/16/12
to int2202ap
O_o,sao mình viết lại thì nó báo lỗi thế nêy, lúc trc còn dùng đc mà :-
SSSSS

Trần Thành Núi

unread,
Feb 16, 2012, 8:13:29 AM2/16/12
to int2202ap
ko khai báo sao sử dụng được. trc học C bị lỗi này suốt mà @@

huyen...@vnu.edu.vn

unread,
Feb 16, 2012, 10:36:16 AM2/16/12
to int2...@googlegroups.com
bai 1 thuc hanh,minh cung thac mac khong hieu ro lam.tai sao k gan gia tri cho bien ma in ra man
hinh van co ket qua?do co phai la gia tri mac dinh tu truoc?

thun...@vnu.edu.vn

unread,
Feb 16, 2012, 11:29:11 AM2/16/12
to int2...@googlegroups.com
thực ra nó sẽ cho 1 giá trị bất kì,
không tin bạn thử mà xem.

Trần Thành Núi

unread,
Feb 17, 2012, 2:59:09 AM2/17/12
to int2202ap
biến tại mọi thời điểm luôn mang 1 giá trị xác định, vì thế ta nên
khởi tạo giá trị ban đầu cho nó. nếu ko giá trị của nó sẽ đc cung cấp
1 giá trị bất kỳ trong khoảng kiểu dữ liệu của biến

do van tu

unread,
Feb 17, 2012, 7:52:44 PM2/17/12
to int2202ap
một biến sau khi sử dụng xong sẽ được giải phóng theo nghĩa đánh dấu ô
nhớ mà nó sử dụng là không có người sử dụng
nhưng nội dung trong ô nhớ đó vẫn không bị xóa. Những giá trị này được
gọi là giá trị rác.
khi ta khai báo một bến. Chương trình sẽ cấp cho nó một vùng nhớ. Lẽ
dĩ nhiên, những ô nhớ trong đó vẫn còn giá trị rác.
Rất không may, những giá trị rác này lại là những giá trị hợp lệ.
Vì ta không biết trước đó các ô nhớ này được dùng làm gì nên nội dung
trong đó là vô nghĩa với ta, Chính vì thế nó thường được coi là ngẫu
nhiên.
Reply all
Reply to author
Forward
0 new messages