01/10/2018, 10:27
Làm thế nào để vòng lặp vẫn chạy đúng nếu biến được nhập không đúng định dạng trước đó?
em có làm một bài tập trong khóa c++ free của anh Đạt, viết code rồi chạy thử, em nhập biến ‘‘id’’ dưới dạng chữ thì chương trình lặp liên tục dòng "Ban da nhap sai ID, hay nhap lai: ". Bây giờ em muốn nó dừng lại để nhập tiếp dữ liệu thì làm như nào ạ?
#include <iostream>
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
const int ID = 123;
const int password = 123456;
int id, password1;
cout << "Nhap ID: "; cin >> id; cout << endl;
do
{
cout << "Ban da nhap sai ID, hay nhap lai: ";
cin >> id;
cout << endl;
} while (ID != id);
cout << "Nhap password: "; cin >> password1; cout << endl;
do
{
cout << "Ban da nhap sai password, hay nhap lai: ";
cin >> password1;
cout << endl;
} while (password != password1);
cout << "Welcome to my world!" << endl;
system("pause");
return 0;
}
Bài liên quan
bác viết hộ e câu lệnh của hàm được không ạ?
Dùng
std::string
sẽ giúp chương trình an toàn khi chạy, kiểm tra thì dùngstd::stoi(id)
id
chỉ nhận giá trịint
cho nên khi người dùng nhập giá trị khácint
cũng như bạn khai báoint id = "string"
=> chương trình bị crashĐọc chưa rõ đề, tưởng ID chỉ có 1 số
hàm stoi là chuyển từ dạng string sang int rồi bác ơi, cái em muốn là kiểm tra xem dữ liệu nhập vào là số hay chữ, nếu là chữ thì sẽ lặp lại để người dùng nhập đúng. Như em làm theo cách của bác Grak-T thì chương trình nó vẫn bị sai. Đây là code của e sau khi thêm lệnh, bác check hộ em xem có đúng ko nhé
hay là bạn thử dùng hàm
isdigit
check từng kí tự cái mới nhận được vào xem.Hàm
isdigit
đúng với tên của nó, nó chỉ kiểm tra 1 kí tự 0-9, nếu có là 10, 32, … thì cũng trả về falseVì code của bạn chỉ muốn kiểm tra là số hay không nên có thể sử dụng code của C:
bác có cách nào khác ko e đang học c++ lại lồng c vào thấy hơi phức tạp ạ
Chương trình của bạn vì muốn phức tạp nên mình khuyên dùng
std::string
std::string s
khi dùng operator [] sẽ trả về 1char
0
đếns.size()
nếuisdigit(s[i]) === false
thì chạy while bắt nhập lại tiếp.Thuật của mình hơi chuối
Có thể dùng cin.good() chứ đừng dùng cái này trong C++.
Ai giúp em giải quyết vấn đề này với
Viết một hàm thử xem