30/09/2018, 23:32

Xin hỏi về vòng lặp do-while trong C++

Mọi người cho mình hỏi khi ta muốn giới hạn người dùng buộc phải chọn những thứ ta đã lập trình ra như ví dụ:
nhập vào 1 số nguyên lớn hơn 0 và nhỏ hơn 5 thì em dùng code:

int n;
do
{
cout<<"
Nhap vao 1 so nguyen 0<n<5,n= ";
cin>>n;
}while(n<1||n>5);

code trên chỉ đúng khi em nhập n là 1 số nguyên,khi em nhập chữ hay kí tự thì vòng do while này lặp không giới hạn,vậy mọi người em phải làm sao để xử lý việc này?

Em xin chân thành cảm ơn

Trọng Nghĩa viết 01:38 ngày 01/10/2018

Dùng string rồi check từng kí tự thử xem bạn.

Nguyễn Văn Vương viết 01:38 ngày 01/10/2018

có cách nào buộc người dùng phải nhập vào số nguyên không bạn nhỉ???(hàm nhập cin)

Khoa Lê Minh viết 01:43 ngày 01/10/2018

Thì nhập xong thì kiểm tra, nếu là số nguyên thì chạy, còn không là số nguyên thì bắt nhập lại bạn ơi

Bính Nguyễn Văn viết 01:35 ngày 01/10/2018

Bạn có thể thử làm như thế này: sử dụng vòng lặp vô hạn, đặt điều kiện dừng (n>0 && n<6) và trong vòng lặp, nếu điều kiện thỏa mãn thì sử dụng hàm break() để kết thúc.

Minh Thành viết 01:33 ngày 01/10/2018

nhập vào 1 số nguyên lớn hơn 0 và nhỏ hơn 5 thì em dùng code:

n > 0 && n < 5 thì ngược lại là: n < 1 || n >= 5

Khai báo số nguyên thì nhập đc số nguyên thôi bạn à, mình hay dùng cách này để check:

#include <iostream>
#include <limits>
using namespace std;

...

cout << "Nhap n:";
int n;
while (!(cin >> n)) // Nhap n
{
    cout << "So ban nhap vao khong hop le!\n";
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cout << "Nhap n:";
}
Trọng Nghĩa viết 01:36 ngày 01/10/2018

Bạn khai báo 1 mảng kí tự, index = 0, rồi dùng hàm get() lấy từng kí tự vào mảng, nếu là số thì tăng index rồi cho nhập tiếp, nếu là Enter thì break, nếu khác hai cái trên(kí tự) thì đưa giá trị index về 0 xem thế nào

Lâm Gia Khang viết 01:40 ngày 01/10/2018

Sử dụng cin.fail() cũng được.

int n;
cout << "Input n: ";
cin >> n;
if (cin.fail()) {
    cin.clear(); 
    cin.ignore(1024, '\n');
    cout << "Invalid value! Input again: " << endl;
    cin >> n;
}

Chố cin.fail() có thể thay bằng !cin.good() cũng được

Nguyễn Văn Vương viết 01:47 ngày 01/10/2018

Mình k biết code ý chứ ý tưởng thì có r

Nguyễn Văn Vương viết 01:35 ngày 01/10/2018

Bọn mình chưa được học hàm này k boết thầy cho ad k nữa

Nguyễn Văn Vương viết 01:36 ngày 01/10/2018

K được dùng get bạn à chỉ dk cin cơ bản thui

Nguyễn Văn Vương viết 01:37 ngày 01/10/2018

Cái này khả thi r ok cảm ơn bạn nha,vẫn mong còn cách hay hơn

Trọng Nghĩa viết 01:32 ngày 01/10/2018

Thay vì get bạn hoàn toàn có thể cin từng phần tử của chuỗi mà

Bài liên quan
0