-
15-07-2014, 11:44 AM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Code này của mình bị lỗi chỗ nhập xâu, sửa thế nào ạ ?
Mình chưa hiểu code này sai ở đâu ạ, mình nhập chỗ mã số của mỗi khách hàng đáng nhé ra
mã số = KH002, còn tên là Nguyen Van A , nhưng mà nó lại nhận vào mã số là KH002NguyenVanA mới chán ợ
code đây các bác
Mã:#include <iostream>#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <string.h>#define MAX 1000 using namespace std; struct khachhang{ char maso[5]; char ten[30]; char diachi[30];};khachhang a[MAX];int n=0; void MenuChinh();void MenuQuanLyKH();void MenuQuanLySDT();void DanhSachKH();void ThemMoiKH();int timkiem(int x, char t[5]);void ChinhSuaKH();void xoaKH(int vt);void XoaBoKH(); main(){ MenuChinh();} void MenuChinh(){ char c; fflush(stdin); do { system("CLS"); cout<<"Khi an chon, neu go nhieu so thi lay so dau, vd 123-> chon 1; danh 2345-> chon 2"<<endl; cout<<"-- QUAN LY THUE BAO DIEN THOAI --"<<endl; cout<<"================================="<<endl; cout<<"_ 1. Quan ly Khach hang "<<endl; cout<<"_ 2. Quan ly so dien thoai "<<endl; cout<<"_ 0. Thoat. "<<endl; cout<<"#Chon: "; cin>>c; } while ( !( (c=='0') || (c=='2') || (c=='1')) ); switch (c) { case '1': MenuQuanLyKH(); break; case '2': MenuQuanLySDT(); break; default: exit(0); }} void MenuQuanLyKH(){ char c; fflush(stdin); do { system("CLS"); cout<<"-- QUAN LY THUE BAO DIEN THOAI --"<<endl; cout<<"Quan ly Khach hang "<<endl; cout<<"================================="<<endl; cout<<"_ 1. Danh sach khach hang "<<endl; cout<<"_ 2. Them moi "<<endl; cout<<"_ 3. Chinh sua "<<endl; cout<<"_ 4. Xoa bo "<<endl; cout<<"_ 0. Tro ve menu chinh "<<endl; cout<<"#Chon: "; cin>>c; } while ( !( (c>='0') && (c<'5') ) ); switch (c) { case '1': DanhSachKH(); break; case '2': ThemMoiKH(); MenuQuanLyKH(); break; case '3': ChinhSuaKH(); MenuQuanLyKH(); break; case '4': XoaBoKH(); MenuQuanLyKH(); break; default: MenuChinh(); }} void MenuQuanLySDT(){ // phan nay minh chua code a char c; fflush(stdin);} void DanhSachKH(){ int i; char c; fflush(stdin); system("CLS"); cout<<"-- QUAN LY THUE BAO DIEN THOAI --"<<endl; cout<<"Danh sach khanh hang"<<endl; cout<<"-------------------------------------------------"<<endl; cout<<"Lan luot cac muc: STT, Ma so, Ten khach hang, Dia chi."<<endl; if (n==0) cout<<"Hien chua co khach hang nao"<<endl; for (i=1; i<=n; i++) { if (i==15) { cout<<"An Enter de tiep tuc in ra tiep"<<endl; getch(); system("CLS"); } cout<<i<<", "<<a[i].maso<<", "<<a[i].ten<<", "<<a[i].diachi<<endl; } cout<<"-------------------------------------------------"<<endl; cout<<"1. Them moi | 2. Chinh sua | 3. Xoa bo | 0.Quay ve"; do { cout<<endl; fflush(stdin); cout<<"#Chon: "; cin>>c; } while (! (c>='0') && (c<'4') ); switch (c) { case '1': ThemMoiKH(); DanhSachKH(); break; case '2': ChinhSuaKH(); DanhSachKH(); break; case '3': XoaBoKH(); DanhSachKH(); break; default : MenuQuanLyKH(); }} int timkiem(int x, char t[5]){ int i; for (i=1; i<=x; i++) if ( strcmp(a[i].maso,t)==0 ) return i; return 0;} void ThemMoiKH(){ char c; int kt; system("CLS"); cout<<"-- QUAN LY THUE BAO DIEN THOAI --"<<endl; cout<<"Them moi khach hang"<<endl; cout<<"-----------"<<endl; do { n++; cout<<endl; do { fflush(stdin); cout<<"_ Ma khach hang: "; gets(a[n].maso,5); fflush(stdin); kt=timkiem(n-1,a[n].maso); if (kt !=0 ) { cout<<"Ma da trung, an Enter de nhap lai"; getch(); } } while (kt!=0); fflush(stdin); cout<<"_ Ten khach hang: "; cin.getline(a[n].ten,30); fflush(stdin); cout<<"_ Dia chi: "; cin.getline(a[n].diachi,30); cout<<".........."<<endl; cout<<"Khach hang moi da duoc them thanh cong !"<<endl; do { fflush(stdin); cout<<"_ Ban co muon tiep tuc ? (C/K): "; cin>>c; c=toupper(c); } while (!( (c=='K') || (c=='C') )); } while (c!='K');} void ChinhSuaKH(){ char c; char maKH[10]; int vt; system("CLS"); cout<<"-- QUAN LY THUE BAO DIEN THOAI --"<<endl; cout<<"Sua thong tin khach hang"<<endl; cout<<"-----------"<<endl; do { do { fflush(stdin); cout<<"_ Nhap ma khach hang can sua: "; cin.getline(maKH,10); vt=timkiem(n,maKH); if (vt==0) cout<<"khong tim thay ma."<<endl; } while (vt==0); cout<<"Thong tin cu:"<<endl; cout<<"+ Ten khach hang: "<<a[vt].ten<<endl; cout<<"+ Dia chi: "<<a[vt].diachi<<endl<<endl; cout<<"Nhap thong tin moi: "<<endl; cout<<"+ Ten khach hang: "; cin.getline(a[vt].ten,30); fflush(stdin); cout<<"+ Dia chi: "; cin.getline(a[vt].diachi, 30); cout<<"........."<<endl; cout<<"Thong tin moi da duoc cap nhat thanh cong !"<<endl; do { fflush(stdin); cout<<"_ Ban co muon tiep tuc ? (C/K): "; cin>>c; c=toupper(c); } while (!( (c=='K') || (c=='C') )); } while (c!='K');} void xoaKH(int vt){ int i; for (i=vt; i<n; i++) a[i]=a[i+1]; n--;} void XoaBoKH(){ char c; char maKH[10]; int vt; system("CLS"); cout<<"-- QUAN LY THUE BAO DIEN THOAI --"<<endl; cout<<"Xoa thong tin khach hang"<<endl; cout<<"-----------"<<endl; do { do { fflush(stdin); cout<<"_ Nhap ma khach hang can xoa: "; cin.getline(maKH,10); vt=timkiem(n,maKH); if (vt==0) cout<<"khong tim thay ma."<<endl; } while (vt ==0 ); cout<<"Thong tin khach hang:"<<endl; cout<<"+ Ten khach hang: "<<a[vt].ten<<endl; cout<<"+ Dia chi: "<<a[vt].diachi<<endl<<endl; xoaKH(vt); cout<<"Da xoa thanh cong !"<<endl; do { fflush(stdin); cout<<"_ Ban co muon tiep tuc ? (C/K): "; cin>>c; c=toupper(c); } while (!( (c=='K') || (c=='C') )); } while (c!='K');}
Mã:void ThemMoiKH(){ char c; int kt;............ n++; cout<<endl; fflush(stdin); cout<<"_ Ma khach hang: "; cin.getline(a[n].maso,5); // chỗ cin.get này có lẽ mình đã làm sai gì đó nên cái mã số không đúng được như theo ý mình ợ, mà nếu chỗ này dùng là cin.getline thì nó ra lặp vô hạn, còn dùng gets thì không bị lặp vô hạn nhưng vẫn lỗi như mình đã nói ở đầu topic ạ. fflush(stdin); cout<<"_ Ten khach hang: "; cin.getline(a[n].ten,30); fflush(stdin); cout<<"_ Dia chi: "; cin.getline(a[n].diachi,30); cout<<".........."<<endl; cout<<"Khach hang moi da duoc them thanh cong !"<<endl;.......}
View more random threads:
- Lỗi khi xài fread đọc từ file nhị phân
- từ điển = bảng băm bị lỗi. Giúp mình sửa lỗi?
- Lỗi xử lí file.txt.
- Sửa lỗi sai
- Sử dụng con trỏ hay không ?
- Huong dan dum minh cach C doc nguyen mot doan ky tu tren mot dong voi
- code về đọc file trong DSLK đơn. Xem hộ cái
- Các bác Sửa giúp em lỗi if trong bài với
- Giúp Mình về phần Chèn Xóa một hàng ra khỏi ma trận
- lỗi sai bài toán kiểm tra số ams trong có 3 chữ số
-
15-07-2014, 03:39 PM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
maso có là char[5] chỉ chứa được tối đa chuỗi có 4 ký tự, làm sao chứa được "KH002" có 5 ký tự.
tăng lên thành char[6]
đổi từ hàm gets(char*) sang cin.getline(char*, int) là đúng rồi, bị cái lỗi trên là vì cin.getline(str, 5) đọc vào 4 ký tự, ký tự thứ 5 ko phải là '
' nên nó set failbit cho cin, cin sau dòng này ko xài được nữa.
sửa bằng cách thêm "mấy" dòng sau cin.getline(str, 6):
Mã:if (cin.fail()) { // hoặc !cin cin.clear(); //xóa failbit cin.ignore(100, ' '); //bỏ qua các ký tự còn dư chưa đọc hết của dòng ký tự hiện tại}
-
17-07-2014, 05:10 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
cái kia là bị multiple definition, tức là mảng a bị định nghĩa lại nhiều lần. Cách khắc phục:
1. đừng xài biến toàn cục.
2. đừng xài global variables.
- '09' là ký tự. "09" mới là chuỗi ký tự... Với lại nếu chỉ so sánh 2 ký tự đầu có phải là "09" hay ko thì cứ so sánh từng ký tự một: (temp[0] == '0' && temp[1] == '9')
- mảng trong C/C++ bắt đầu từ 0, nên temp[1] thực chất là ký tự thứ 2
- trong C/C++ ko có truyền mảng, chỉ có truyền con trỏ, nên char temp[11] thực chất là char* temp
-
17-07-2014, 07:03 PM #4
Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Thanks bạn nhiều [IMG]images/smilies/smile.png[/IMG], mình đã sửa được chỗ đó rồi. Như hiện giờ mình đang muốn làm 1 bài này ra thành nhiều phần có 1 file là chứa dữ liệu chung là mảng a,n,... là file ctdl.h của cả chương trình. 3 file .h là file thư viện chứ các hàm, các file .cpp là file định nghĩa các hàm trong thư viện hamchung.h, xulyDLKH.h, xulySDT.h
đây là code của mình
http://www.fileswap.com/dl/vi0Lz0kGGv/code.rar.html
Nhưng nó báo là lỗi không tìm thấy cái mảng a, n mặc dù mình đã khai báo thư viện ctdl.h ở các file .h, .cpp khác ?
đây là lỗi mà code::block báo ạ
||=== Build: Debug in dienthoai (compiler: GNU GCC Compiler) ===|
D:\Dropbox\code\CC++\dienthoai\main.cpp|6|warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]|
obj\Debug\main.o||In function `_tcf_0':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\iostream|75|multiple definition of `vt'|
obj\Debug\main.o||In function `_tcf_0':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\iostream|75|multiple definition of `n'|
obj\Debug\hamchung.o:d:\codeblocks\mingw\bin\..\li b\gcc\mingw32\4.7.1\include\c++\iostream|75|first defined here|
obj\Debug\main.o||In function `main':|
D:\Dropbox\code\CC++\dienthoai\main.cpp|8|multiple definition of `a'|
obj\Debug\hamchung.o:d:\codeblocks\mingw\bin\..\li b\gcc\mingw32\4.7.1\include\c++\bits\basic_ios.h|1 50|first defined here|
obj\Debug\xulyDLKH.o||In function `_tcf_0':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\iostream|75|multiple definition of `n'|
obj\Debug\hamchung.o:d:\codeblocks\mingw\bin\..\li b\gcc\mingw32\4.7.1\include\c++\iostream|75|first defined here|
obj\Debug\xulyDLKH.o||In function `ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12 _Ios_Iostate':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\bits\basic_ios.h|150|multiple definition of `a'|
obj\Debug\hamchung.o:d:\codeblocks\mingw\bin\..\li b\gcc\mingw32\4.7.1\include\c++\bits\basic_ios.h|1 50|first defined here|
obj\Debug\xulySDT.o||In function `_tcf_0':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\iostream|75|multiple definition of `vt'|
obj\Debug\xulySDT.o||In function `ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12 _Ios_Iostate':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\bits\basic_ios.h|150|multiple definition of `a'|
obj\Debug\hamchung.o:d:\codeblocks\mingw\bin\..\li b\gcc\mingw32\4.7.1\include\c++\bits\basic_ios.h|1 50|first defined here|
obj\Debug\xulySDT.o||In function `_tcf_0':|
d:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\i nclude\c++\iostream|75|multiple definition of `n'|
obj\Debug\hamchung.o:d:\codeblocks\mingw\bin\..\li b\gcc\mingw32\4.7.1\include\c++\iostream|75|first defined here|
||=== Build failed: 14 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|
Mã:int checksdt(char temp[11]) { int test=0; char dau[3]; strcpy(dau,temp[1]); strcat(dau,temp[2]); if ( (strlen(temp) == 10) && (strcmp(dau,'09')==0) ) test=1; return test; }
-
18-07-2014, 05:00 PM #5
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi INTP
Nếu không dùng biến toàn cục thì đổi kiểu gì đây bác ?, chả nhẽ mình sẽ truyền tham số cho từng hàm 1 ạ ?
-
18-07-2014, 05:33 PM #6
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi daogiahieu
- Tất nhiên nếu như bạn dùng namespace riêng thì ko sao (bỏ cái using namespace std; đi nhóe).
-> Vấn đề là C++ mới có namespace, và code bạn toàn C là C.
Cái này thì bạn tự refactor.
-
18-07-2014, 05:35 PM #7
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
biến toàn cục dễ trùng tên => tên phức tạp để tránh trùng => hàm sử dụng biến toàn cục thì phải biết tên phức tạp của biến toàn cục, trong khi viết hàm truyền tham số vào thì đổi tên ngắn gọn được...
Hơn nữa 1 hàm xài biến toàn cục thì ko re-use được, vd 1 lúc chỉ xài được cho 1 ctdl, nếu phải xài 2 ctdl cùng lúc thì làm sao? Truyền tham số là con trỏ tới ctdl cho từng hàm thì có thể sử dụng ctdl khác nhau, 1 hàm find(ctdl* db, char* name) có thể re-use cho 2 ctdl khác nhau.
-
19-07-2014, 06:42 PM #8
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
OK được rồi thanks bác, mình đã hiểu.
-
20-07-2014, 08:26 AM #9
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Các bạn ơi, giờ mình muốn đọc cái dữ liệu của người từ tệp, nhưng không hiểu nó toàn bị đọc lệch
mình muốn đọc theo thứ tự là mã số, tên người, địa chỉ, số các số điện thoại
đây là file cần đọc
3
KH001
Nguyen Van A
Ha Noi
2
KH002
Nguyen Van B
Da Nang
1
KH003
Nguyen Van C
Hai Phong
1
0973141146
Tra Sau
04/05/2010
0912364489
Tra Truoc
12/6/2010
0924325543
Tra Sau
5/8/2011
0954234789
Tra Sau
1/52013
Mã:void DocTep() { int i, j; ifstream fin("customer.dat", ios::in); ifstream fin2("number.dat", ios::in); if ( (fin) && (fin2) ) { fin>>n; for (i=1; i<=n; i++) { fin.clear(); fin.getline(a[i].maso, StrMAX); fin.clear(); fin.getline(a[i].ten, StrMAX); fin.clear(); fin.getline(a[i].diachi, StrMAX); fin.clear(); fin>>a[i].soluong; for (j=1; j<=a[i].soluong; j++) { fin2.clear(); fin2.getline(a[i].sodt[j].sdt, StrMAX); fin2.clear(); fin2.getline(a[i].sodt[j].loaithuebao, StrMAX); fin2.clear(); fin2.getline(a[i].sodt[j].ngaydangky, StrMAX); } } } fin.close(); fin2.close(); }
(
còn phần số điện thoại nó chả đọc được tý nào mới chán(
-
21-07-2014, 02:21 PM #10
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Các bạn ơi, chỉnh hộ mình phần đọc dữ liệu từ file với ạ, mình ngồi viết hết các hàm xử lý dữ liệu rồi mà còn phần đọc này mãi vẫn chưa chỉnh được ạ.
[/b] Tại Lương Sơn TV bạn sở hữu thể xem truyền hình trực tiếp bóng đá hôm nay các giải đấu to trong và ngoài nước. Lương Sơn TV ko chỉ đem lại những trận chiến mãn nhãn sở hữu chất lượng hình ảnh...
Các giải đấu không thể bỏ lỡ tại...