Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hàm kiểm tra input trong c++

    mình có 1 bài tập C++ nhập code, name, grade của sv mình k biết viết hàm kiểm tra tên thế nào hả ai giúp mình với. Vd như Enter name: 123123 thì n sẽ báo lỗi và bắt nhập lại
    Mã:
    #include <iostream>
    #include <string.h>
    #include <iomanip>
    #include <stdlib.h>
    
    using namespace std;
    
    class Student{
    	int code;
    	double grade;
    	char* name;
    	
    public:
    	Student(){
    		name = new char[50];
    		code = 0;
    		grade = 0;
    		strcpy(name,"");
    	}
    	Student(int co, char na[], double gra){
    		name = new char[50];
    		code = co;
    		strcpy(name,na);
    		grade = gra;
    	}
    	/*~Student(){
    		cout << "SAFE EMPTY STATE" << endl;
    		if(name != NULL)
    		delete []name;
    		name = NULL;
    	}*/
    	void accept(){
    		while(true)
    		{
    			cout<<"Enter Code:";
    			cin>>code;
    			if(cin.fail() || (cin.get())!='
    ')
    				{
    				cin.clear();
    				fflush(stdin);
    				cout<<"Invalid data, please reenter!"<<endl;
    				continue;
    				}
    				else if(code>100 || code<1){
    					cin.clear();
    					fflush(stdin);
    					cout<<"Code [1,100]"<<endl;
    				}
    				 else break;
    		}
    		while(true){
    		cout << "Enter Name: ";
    		cin.getline(name,20);
    		if(cin.fail() || (cin.get())!='
    '){
    		cin.clear();
    		fflush(stdin);
    		cout<<"Invalid data, please reenter!"<<endl;
    		}	
    		else break;
    	}
    		while(true){
    		cout<< "Enter Grade: ";
    		cin >> grade;
    		if(cin.fail() || (cin.get())!='
    ')
    			{
    			cin.clear();
    			fflush(stdin);
    			cout<<"Invalid data, please reenter!"<<endl;
    			continue;
    			}
    			else if(grade>10 || grade<1){
    					cin.clear();
    					fflush(stdin);
    					cout<<grade<<" is out of range [1,10]"<<endl;
    				}
    			else break;
    		}
    	}
    	void display(){
    		if(code==0, strcmp(name,"")==0, grade==0){
    			cout<<"EROOR!!"<<endl;
    		}else cout<<endl<<setw(15)<<left<<code<<setw(30)<<left<<name<<setw(15)<<left<<setprecision(2)<<fixed<<grade<<endl;
    	}
    };
    int main(){
    	
    	Student s1, s2, s3;
    	cout << "============= TEST CASE 01 ==============" << endl;
    	s1.display();
    
    	cout << endl << "============= TEST CASE 02 ==============";
    	s2 = Student(6886,"Messi",6.5);
    	s2.display();
    
    	cout << endl << "============= TEST CASE 03 ==============" << endl;
    	s3.accept();
    
    	cout << endl << "============= TEST CASE 04 ==============";
    	cout<<endl<<setw(15)<<left<<"ID"<<setw(30)<<left<<"NAME"<<setw(15)<<left<<fixed<<"GRADE";
    	s3.display();
    
    	system("pause");
    	return 0;
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    con trỏ name bạn chưa cấp phát bộ nhớ nên chưa dùng được cin.getline(name,20)

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ANHMATTROI
    con trỏ name bạn chưa cấp phát bộ nhớ nên chưa dùng được cin.getline(name,20)
    Mình cấp phát rồi mà
    Mã:
    name = new char[50];

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    do cin.fail() báo lỗi không nhập được dữ liệu cho con trỏ name nếu bạn nhập quá 20 kí tự thì cin.get()!= 13 báo lỗi

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •