Dùng cin nhập vào dữ liệu nhưng không được

Nhờ anh chị giải đáp

Em đang làm bài code đọc dữ liệu vào từ file
Dùng:

            while (getline(cin,stm)) {
			NhapMang(S,N,stm,delims);
		}

Sau đó, em khai báo biến int key / string s;
nhưng không nhập dữ liệu vào được.
Nó tự bỏ qua.
Em đã thử dùng fflush(stdin) hay cin.ignore() mà vẫn vậy

Không thể giúp cho bạn được, bạn chỉ đưa một đoạn mã nhỏ, vả lại hàm NhapMang(S, N, stm, delims) chả biết nó viết gì trong đó, S là gì, N là gì,…
Nếu bạn muốn giúp thì đưa mã của bạn lên đây, chép-dán chứ không phải chụp hình đâu.

1 Like
#include <bits/stdc++.h>
#include <conio.h>
#include <iostream>
using namespace std;

typedef struct {
	string sdt;
	string holot;
	string ten;
	string gioitinh;
	string diachi;
	string namsinh; 
} SoDienThoai;

vector<string> split (const string& text, const string& delims) {
	vector<string> tokens;
	size_t start = text.find_first_not_of(delims), end = 0;
	while ((end = text.find_first_of(delims, start)) != string::npos) {
		tokens.push_back(text.substr(start, end - start));
		start = text.find_first_not_of(delims, end);
	}
	if (start != string::npos) tokens.push_back(text.substr(start));
	return tokens;
}

void NhapMang(SoDienThoai s[], int &n, string stm, string delims) {
		vector<string> tokens = split(stm, delims);
	//================Dua thong tin vao Struct============
//		cout << tokens[0] <<" "<< tokens[1]<<" "<<tokens[2]<<" "<< tokens[3]<<" "<< tokens[4]<<" "<< tokens[5]<<endl;
		n++;
		s[n].sdt = tokens[0];
		s[n].holot = tokens[1];
		s[n].ten = tokens[2];
		s[n].gioitinh = tokens[3];
		s[n].diachi = tokens[4];
		s[n].namsinh = tokens[5];
		tokens.clear();
}

void XuatMang(SoDienThoai s[], int n) {
	//================Dua thong tin vao Struct============
	for (int i = 1; i <= n; i++)
	{
		cout <<s[i].sdt << " " << s[i].holot << " " << s[i].ten << " " << s[i].gioitinh << " " << s[i].diachi << " " << s[i].namsinh << endl;
	}
}

void timKiemTheoSDT(SoDienThoai s[], int n, string find_sdt) {
	for (int i = 1; i <= n; i++){
		if (s[i].sdt == find_sdt) {
			cout <<s[i].sdt << " " << s[i].holot << " " << s[i].ten << " " << s[i].gioitinh << " " << s[i].diachi << " " << s[i].namsinh << endl;
		}
	}
}

void pressAnyKey() {
    cout << "\n\nBam phim bat ky de tiep tuc...";
    getch();
    system("cls");
}

int main() {
	fflush(stdin);
	SoDienThoai S[100];
	int N = 0;
	string stm;
	string delims = ",";
	freopen("profile.csv","r",stdin);
	while (getline(cin,stm)) {
		NhapMang(S,N,stm,delims);
	}			
	cin.ignore();
	int key;
	string tel;
	while(1) {
        cout << "           CHUONG TRINH STRUCT SO DIEN THOAI           \n";
        cout << "*************************MENU**************************\n";
        cout << "**  1. Hien thi danh sach SoDienThoai.               **\n";
        cout << "**  2. Tim kiem thong tin nguoi theo so dien thoai.  **\n";
        cout << "**  3. Sap xep tang dan theo so dien thoai.          **\n";
        cout << "**  4. Sap xep tang dan theo ten.                    **\n";
        cout << "**  0. Thoat                                         **\n";
        cout << "*******************************************************\n";
        cout << "Nhap tuy chon: ";
        cin >> key;	
        switch(key){
            case 1:
            	if (N > 0) {
            		cout << "\nHien thi danh sach SoDienThoai" << endl;
					XuatMang(S,N);
				}else {
					cout << "\nDanh sach trong" << endl;
				}
				pressAnyKey();
				break;
			case 2:
				cin.ignore();
				cout <<"\nNhap vao so dien thoai can tim: ";
				getline(cin,tel);
				timKiemTheoSDT(S,N,tel);
				pressAnyKey();
				break;
			default:
				cout << "\nKhong co chuc nang nay!";
				cout << "\nHay chon chuc nang trong hop menu.";
                pressAnyKey();
                break;
		}
	}
return 0;
}

Đây là nội dung File .cvs ạ!

0772418791,Le Van,Anh,Nu,Hue,2000
0772418791,Truong Viet,Giang,Nam,HCM,2002
0772418792,Nguyen Thi,Binh,Nu,Da Nang,2001
0772418793,Truong My,Hoa,Nu,Sai Gon,2003
0772418794,Truong Van,Lap,Nam,Quang Tri,2002
0772418795,Ha Trong,Nam,Nam,Hue,2000
0772418765,Nguyen Quoc,Anh,Nam,Hue,2001

Sau khi khai báo file thì không nhập được dữ liệu từ bàn phím ạ!

2 posts were removed

Chính vì câu này mà mất kb input.
Mặc định stdin dẫn từ bàn phím (có thể dẫn từ file qua terminal) mà bạn chuyển nó thành file là xong phim.

3 Likes

phải sửa sao vậy ạ, Nhờ anh giúp ạ

Đọc từ tập tin thì dùng ifstream để đọc. Bạn gộp đè lên luồng đọc chính từ bàn phím stdin/cin thì sẽ mất kết nối với bàn phím thôi.

1 Like

Em vừa đọc từ tập tin mà cũng nhập từ bàn phím thì dùng ifstream đúng ko ạ?
Nhờ anh giải đáp

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