30/09/2018, 22:58

Hỏi Cách sử dụng while trong C & C++

cách code
while (0> luachonmenu >4 )
{
}
có dc xem là đúng ko hay phải code thành 2 dòng :
while ( luachonmenu <0 )
{
}

while ( luachonmenu >4 )
{
}
p/s: gà mờ mới học ạ ~,~

Trần Ngọc Khoa viết 01:03 ngày 01/10/2018

while (0> luachonmenu >4 )

while (0 < luachonmenu && luachonmenu < 4 )

Menu theo mình là từ số 1 đến số 3

Nếu bạn dùng vòng lặp để cho người dùng nhập vào cho đến khi nào đúng thì ngoài vòng while có thể dùng vòng
do{} while();

do{
//Nhập vào
}
while(menu < 1 || menu >= 4);
nohat viết 01:03 ngày 01/10/2018

Đây là 1 câu hỏi khá hay và nếu không cẩn thận rất dễ sai. Với trường hợp cần kiểm tra điều kiện kẹp như trên, bạn hãy viết tách biệt ra

while ( 0 > luachonmenu && luachonmenu >4){

// something goes here
}

Tại sao lại phải viết như vậy, mình sẽ lấy 1 ví dụ khác, giả sử có câu lệnh điều kiện sau:

if ( 3 > 8 < 5 ) {
   std::cout << "right" << std::endl;
} else {
   std::cout << "wrong" << std::endl;
}

Vậy trường hợp này, theo bạn kết quả sẽ là gì? Căn cứ vào đâu để biết kết quả sẽ thế nào? 1 phút suy nghĩ bắt đầu

Việt Anh viết 01:01 ngày 01/10/2018

Vậy trường hợp này, theo bạn kết quả sẽ là gì? Căn cứ vào đâu để biết kết quả sẽ thế nào? 1 phút suy nghĩ bắt đầu

mình mới học C chưa rành C++ nhưng mình đoán là “wrong” phải ko =))

Việt Anh viết 01:01 ngày 01/10/2018

Nếu bạn dùng vòng lặp để cho người dùng nhập vào cho đến khi nào đúng thì ngoài vòng while có thể dùng vòngdo{} while();

tks bạn mà bạn có thể giải thích mình hiểu sao trường phải này dùng do…while tốt hơn while ko ? hay dùng cái nào cũng dc.

nohat viết 01:06 ngày 01/10/2018

Với trường hợp này thì C và C++ như nhau, và câu trả lời là right

Việt Anh viết 01:07 ngày 01/10/2018

Với trường hợp này thì C và C++ như nhau, và câu trả lời là right

bạn giải thích cho mình dc ko

nohat viết 01:03 ngày 01/10/2018

Vậy C/C++ tính giá trị của điều kiện này như thế nào, tại sao:

(3 > 8 < 5 )

lại cho ra kết quả logic là true? Biểu thức này có tương đương với

3 > 8 && 8 < 5 

hay tương đương với 1 biểu thức nào khác.
Câu trả lời là biểu thức trên tương đương với 1 biểu thức tính toán thông thường, và các toán tử <, > được xem xét như các dấu phép toán +, -, *, / mà thôi. Với độ ưu tiên của phép toán lớn hơn ( > ) và bé hơn ( < ) là như nhau, biểu thức được tính từ trái qua phải:
3 > 8 = failed ~ 0 ( c/c++ chưa rạch ròi giữa biến logic và biến nguyên, faied được hiểu là 0, và true là #0, thường là 1 luôn)
tiếp đó biểu trở thành:

3 > 8 < 5 -->  0 < 5

Và hiển nhiên là giá trị cuối cùng là true.

Trần Ngọc Khoa viết 01:10 ngày 01/10/2018

Mình sẽ ví dụ cho dễ hiểu nhé:

while(true)
{
std::cout << "Enter your name: ";
std::cin >> name;
if (check_name(name) == 1) break;
}

do{
std::cout << "Enter your name: ";
std::cin >> name;
} while(check_name(name) != 1);

Như vậy sử dụng vòng do{}while(); sẽ giảm bớt một phép so sánh trong trường hợp này. Và nó dễ hiểu hơn.

Việt Anh viết 01:04 ngày 01/10/2018

Như vậy sử dụng vòng do{}while(); sẽ giảm bớt một phép so sánh trong trường hợp này. Và nó dễ hiểu hơn.

chỉ ngắn ngọn hơn thôi hả bạn, nếu mình chỉ luôn sử dụng while(); có dc ko

Trần Ngọc Khoa viết 00:59 ngày 01/10/2018

Tất nhiên là được. Nhưng nhiều trường hợp thì dùng do{} while(); sẽ thuận tiện và đỡ tốn thời gian hơn.
Một ví dụ đơn giản, bạn cần viết 100 vòng lặp. nếu dùng do{} while(); thay cho while(), bạn sẽ giảm bớt được 100 dòng so sánh thì bạn sẽ chọn cái nào?

Việt Anh viết 01:09 ngày 01/10/2018

Tất nhiên là được. Nhưng nhiều trường hợp thì dùng do{} while(); sẽ thuận tiện và đỡ tốn thời gian hơn. Một ví dụ đơn giản, bạn cần viết 100 vòng lặp. nếu dùng do{} while(); thay cho while(), bạn sẽ giảm bớt được 100 dòng so sánh thì bạn sẽ chọn cái nào?

đã thông não tks nhé

Trần Ngọc Khoa viết 01:12 ngày 01/10/2018

Không có gì .

nohat viết 01:09 ngày 01/10/2018

Dĩ nhiên phải chú ý là khi dùng do { } while() thì vòng lặp chắc chắn được thực hiện ít nhất 1 lần, do vậy bạn phải check xem ngay ở lần thực hiện đầu tiên điều kiện có thoả mãn hay không, vì ở lần đầu thực hiện điều kiện ko dc kiểm tra

Bài liên quan
0