30/09/2018, 17:40

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 ạ?

hong duc viết 19:40 ngày 30/09/2018

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

Bao "Storm" Le viết 19:54 ngày 30/09/2018

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

Quan viết 19:50 ngày 30/09/2018

đú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.

Nguyen Minh Quan viết 19:54 ngày 30/09/2018

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

Võ Hoài Nam viết 19:49 ngày 30/09/2018

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

nhatlonggunz viết 19:47 ngày 30/09/2018

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

Tuyendothanh viết 19:50 ngày 30/09/2018

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 đó.

viết 19:42 ngày 30/09/2018

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.

Sent Fake viết 19:41 ngày 30/09/2018

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

Võ Hoài Nam viết 19:43 ngày 30/09/2018

để 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ỉ?

Bài liên quan
0