Cách ngừng vòng lập vĩnh viễn trong C/C++?

Có cách nào để khi chương trình của mình gặp phải vòng lặp vĩnh viễn (do nhập dữ liệu sai) thì mình dừng vòng lặp đó lại để in ra thông báo không ạ?

bạn chỉ có thể kiểm tra dữ liệu đó trước khi đưa vào vòng lặp hoặc là trong khi lặp thôi, chứ khi vòng lặp đã chạy rồi nếu không có điều kiên dừng nào đó thì nó sẽ chạy hoài, khi đó chỉ còn cách thoát ra vô lại thôi

Không thể dừng vòng lặp vĩnh viễn.

đúng rồi. bạn đặt điều kiện cho giá trị nhập vào nếu không đúng thì nó sẻ nhập lại or kết thúc ct luôn chả hạn.

cảm ơn mọi người :smiley:

Có 2 cách…

  1. tắt chương trình…
  2. tắt máy

Mình thấy cách này là cổ điển và dễ áp dụng nhất :smile:

Em thấy ctrl + S cũng tốt, dừng lại ngăm chơi :slight_smile:

Vẫn có cách dừng vòng lập vĩnh viễn thông đấy. Cho nó chạy trong thread rồi abort thread đó.

có, kiểm tra cin.fail() hay cin.good() sau khi nhập ví dụ cin >> x, trong đó xint chẳng hạn. Nếu fail thì clear() và ignore() ký tự thừa. Có thể xài gộp khi nhập luôn: cin >> x trả về cin, nếu cin.good() thì cin >> x trả về cin bình thường, hiểu là true, còn ko thì bị set failbit hay badbit gì đó, coi như là false

#include <iostream>
#include <limits> //std::numeric_limits

int main()
{
  int x;
  std::cout << "Nhap x:\n";
  while (!(std::cin >> x)) { //ktra input có đúng số nguyên ko
    std::cerr << "Vui long nhap so nguyen\n";
    std::cin.clear(); //bỏ failbit của cin
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); //bỏ những kí tự thừa còn trong cin
  }
  std::cout << "x = " << x << "\n";
}

chỗ ignore() thì có thể viết là std::cin.ignore(100, '\n'); cũng được rồi.

bạn thử tìm hiểu try{} catch(){} nhé! Mình nghĩ là OK!

để nó catch được thì bạn phải quăng exception ra… vòng lặp vô tận sao nó biết đường để quăng ra nhỉ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?