01/10/2018, 08:59
Hỏi về cách dừng một hàm khi điều kiện sai
Hàm void thì dừng chương trình bằng return;
. Còn các hàm có giá trị trả về thì dừng khi điều kiện sai kiểu gì ạ. Mình nói hơi khó hiểu. Mọi người xem vd sẽ hiểu ý của mình:
Vd: hàm tính thương
float tinhTHuong(float a, float b) {
if (b == 0) // thi dung chuong trinh nhung o day phai return 1 gia tri
}
Lúc học TH thầy mình có nói sơ là dùng xử lý ngoại lệ throw
. Mình tìm hiểu thì ra try catch
khá phức tạp nhưng mục đích của em chỉ là dừng chương trình thôi. Mong mọi người giải đáp giúp mình
Bài liên quan
Bạn có thể dùng assert()
http://en.cppreference.com/w/cpp/error/assert
Bạn tìm hiểu thiếu rồi,
stackoverflow.com
throw exception
ko nhất thiết phải dùngtry catch
, nếu bạn muốn đơn giản chỉ cần dùngthrow
thôi là nó sẽ dừng chương trình. Xem ví dụ tương tự như của bạn ở đây nhé:How to throw a C++ exception
Hi Kira.
Có hai phong cách code.
1 Code có tâm. Kiểm tra các biến truyền vào lỗi nén ngoại lệ hoặc return.
2 Code không có tâm. Chỉ kiển tra các biến khai báo mới trong hàm. Các biến truyền vào gây lỗi không quan tâm.
Mình chỉ code theo cách 2.
Tks bạn nhé
Code kiểu này dễ gây thù hằn lắm
Hi Kira. (death note).
Nó làm code của bạn sạch hơn. Bớt các bước kiểm tra thừa.
Kiểu có tâm:
Kiểu rảnh hơi kiểm tra đủ các loại điều kiện, trong trường hợp này chỉ check b==0:
Nếu mà là C# thì bạn không cần quăng exception, chương trình sẽ tự quăng, trừ khi bạn muốn đánh lừa bọn “hacker” chuyên crack phần mềm bằng cách quăng exception giả để che exception thật.
return
null
là trả về 0 rồi bạn khác nào 2/0 = 0. Ở đây mình muốn 2/0 nó sẽ hiện radòng lệnh không thực hiện phép chia và dừng chương trình
Code theo cách 2 thì làm sao qua được bước Unit Test vậy bác???
debug hiện lỗi chương trình ko chạy được bạn à
Mình làm theo như vậy chương trình lỗi không chạy được
Mình tưởng nó sẽ in ra câu
"received negative value"
chứ nhỉterminate called after throwing an instance of ‘std::invalid_argument’
what(): received negative value
chỗ what() nó in ra đó
edit: chắc đang xài VS à?
Uk. Mình dùng VS 2015
Nếu kẹt quá thì mình sẽ làm như vầy:
Không thiết thực cho lắm ạ. Mong có ai rành cái này giải đáp dùm mình
Hi gioi.
Truyền biến sai cũng là một test mà. @_@!
Không biết bạn đã làm UnitTest chưa???
UnitTest là sao bạn. Hình như mọi người không hiểu ý của mình thì phải
Bạn
throw
ra thì phảitry...catch
nó lại, trong hàm mainBắt buộc phải có ạ. Mình cứ tưởng không có cũng được chứ @@