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 )
{
}
và
while ( luachonmenu >4 )
{
}
p/s: gà mờ mới học ạ ~,~
Hỏi Cách sử dụng while trong C & C++
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);
Đâ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
mình mới học C chưa rành C++ nhưng mình đoán là “wrong” phải ko =))
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.
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
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.
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;
}
Và
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.
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
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é
Không có gì .
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