Hỏi về dùng vòng lặp do-while để phát hiện việc nhập sai dữ liệu

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<<"\nNhap 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

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

1 Like

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)

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

2 Likes

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.

1 Like

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:";
}
1 Like

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 :slight_smile:

1 Like

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

3 Likes

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

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

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

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

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

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