Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Hỏi về mảng cấu trúc trong C++

  1. #1
    Ngày gia nhập
    02 2008
    Bài viết
    1

    Mặc định Hỏi về mảng cấu trúc trong C++

    chào mọi người, em mới làm quen với C++ nên có bài tập này cần hỏi, mong mọi người giúp đỡ em.

    Đề bài như sau:
    Viết Hàm Nhập Xuất mảng một chiều các sổ tiết kiệm gồm :
    Mã sổ : chuỗi ( 5 ký tự )
    Loại tiết kiệm : chuỗi ( 10 ký tự )
    Họ tên khách hàng : chuỗi ( 30 ký tự )
    CMND : số nguyên ( int )
    Ngày mở sổ : KDL NGÀY
    Số tiền gởi : float.

    Em đã code rồi nhưng bị báo lỗi, em ko hiểu lỗi này là bị cái gì nữa, nên nhờ mọi người giúp đỡ.

    Code của em :

    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <string.h>
    
    struct ngay
    {
    	int ng;
    	int th;
    	int nm;
    };
    typedef struct ngay NGAY;
    
    struct sotietkiem
    {
    	char maso[6];
    	char loai[11];
    	char ten[31];
    	int cmnd;
    	NGAY ngaymo;
    	float tiengoi;
    };
    typedef struct sotietkiem SOTIETKIEM;
    
    void Nhap(NGAY &);
    void Xuat(NGAY);
    void NhapSo(SOTIETKIEM &);
    void XuatSo(SOTIETKIEM );
    void NhapDS(SOTIETKIEM [],int &);
    void XuatDS(SOTIETKIEM [],int );
    
    void main()
    {
    	SOTIETKIEM a[100];
    	int n;
    	NhapDS(a,n);
    	XuatDS(a,n);
    }
    
    void Nhap(NGAY &x)
    {
    	printf("\n Nhap ngay : ");
    	scanf("%d",&x.ng);
    	printf("\n Nhap thang : ");
    	scanf("%d",&x.th);
    	printf("\n Nhap nam : ");
    	scanf("%d",&x.nm);
    }
    
    void Xuat(NGAY x)
    {
    	printf("\n Ngay : %d",x.ng);
    	printf(" thang %d",x.th);
    	printf(" nam %d",x.nm);
    }
    
    void NhapSo(SOTIETKIEM &x)
    {
    	printf("\n Nhap ma so : ");
    	gets(x.maso);
    	printf("\n Nhap loai tiet kiem : ");
    	gets(x.loai);
    	printf("\n Nhap Ho ten : ");
    	gets(x.ten);
    	printf("\n Nhap so CMND : ");
    	scanf("%d",&x.cmnd);
    	printf("\n Nhap ngay mo so: ");
    	Nhap(x.ngaymo);
    	printf("\n Nhap so tien gui: ");
    	float temp;
    	scanf("%f",&temp);
    	x.tiengoi=temp;
    }
    
    void XuatSo(SOTIETKIEM x)
    {
    	printf("\n Ma so : %c",x.maso);
    	printf("\n Loai tiet kiem : %c",x.loai);
    	printf("\n Ho ten : %c",x.ten);
    	printf("\n CMND : %d",x.cmnd);
    	printf("\n Ngay mo so : ");
    	Xuat(x.ngaymo);
    	printf("\n So tien goi : %f",x.tiengoi);
    }
    
    void NhapDS(SOTIETKIEM a[],int n)
    {
    	printf("\n Nhap n: ");
    	scanf("%d",&n);
    	for (int i=0;i<n;i++)
    	{
    		printf("\n Cuon so thu : %d",i);
    		NhapSo(a[i]);
    	}
    }
    
    void XuatDS(SOTIETKIEM a[],int n)
    {
    	for (int i=0;i<n;i++)
    		XuatSo(a[i]);
    }
    báo lỗi :

    Code:
    --------------------Configuration: 678 - Win32 Debug--------------------
    Linking...
    678.obj : error LNK2001: unresolved external symbol "void __cdecl NhapDS(struct sotietkiem * const,int &)" (?NhapDS@@YAXQAUsotietkiem@@AAH@Z)
    Debug/678.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.
    
    678.exe - 2 error(s), 0 warning(s)
    Cám ơn mọi người đã quan tâm.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi street Xem bài viết
    void NhapDS(SOTIETKIEM [],int &);
    void NhapDS(SOTIETKIEM a[],int n)
    {
    ...
    }
    Khai báo và định nghĩa không khớp nhau nên sinh ra lỗi khi link.

  3. #3
    Ngày gia nhập
    02 2008
    Bài viết
    1

    àh, hèn gì, cám ơn bạn nhiều nha.

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    box C++ bên trên mà....
    Em chưa hiểu ý anh, nếu em post sai box anh vui lòng move dùm, thanks anh rất nhiều

    Em đã chỉnh cái chỗ này rồi :
    Code:
    void NhapDS(SOTIETKIEM [],int &);
    void NhapDS(SOTIETKIEM a[],int n)
    {
    ...
    }
    Nhưng khi chạy nó ko cho nhập cái chuỗi x.maso.

    Khi chạy nó ra vậy luôn ( sau khi nhập n xong ctrình ko báo nhập Mã Số mà chạy tới dòng nhập Loại Tiết Kiệm òi ).



    có ai biết chỉ mình nha.

    cám ơn rất nhiều

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi street Xem bài viết
    Nhưng khi chạy nó ko cho nhập cái chuỗi x.maso.

    Khi chạy nó ra vậy luôn ( sau khi nhập n xong ctrình ko báo nhập Mã Số mà chạy tới dòng nhập Loại Tiết Kiệm òi ).
    Đấy là do còn sót lại cái gì đó trong stdin buffer nên nó bị gets() vào x.maso.
    Trước khi gọi gets(x.maso) bạn thực hiện lệnh này

    fflush(stdin);

    để xóa sạch buffer thì sẽ trị được nó.

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Hỏi về mảng cấu trúc trong C++

    Hàm gets() xài rất poor-peformance, nếu cậu muốn dùng something cleaner thì thử cái này :
    C Code:
    1. #include <cstdio>
    2. #include <cstdlib>
    3.  
    4. void getString( char str[], unsigned len )
    5. {
    6.     getchar();
    7.     int toke, x = 0;
    8.     while( ( toke = getchar( ) ) != EOF && toke != '\n' )
    9.     {
    10.         str[ x++ ] = toke;
    11.         if( x == len )
    12.         {
    13.             printf( "\n...buffer overflow.\n" );
    14.             exit( 1 );//return;
    15.         }
    16.     }
    17.     str[ x ] = '\0';
    18. }
    19.  
    20. int main()
    21. {
    22.     char some_data[ 20 ];
    23.     int  some_value;
    24.  
    25.     scanf( "%d", &some_value );
    26.     readString( some_data, 20 );
    27.  
    28.     printf( "%s", some_data );
    29. }

  7. #7
    Ngày gia nhập
    02 2008
    Bài viết
    1

    ok, khi mình chèn fflush(stdin); thì nó đã nhập được rồi, thanks.

    Cái hàm của anh MOD đưa em ko hiểu , dù sao cũng cám ơn anh Mod. Em sẽ suy nghĩ về nó .

    Thanks all !

  8. #8
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    483

    Trích dẫn Nguyên bản được gửi bởi street Xem bài viết
    ok, khi mình chèn fflush(stdin); thì nó đã nhập được rồi, thanks.

    Cái hàm của anh MOD đưa em ko hiểu , dù sao cũng cám ơn anh Mod. Em sẽ suy nghĩ về nó .

    Thanks all !
    cái getString() ấy dùng thay cho gets(), vì gets() không an toàn.

    Giả sử trong main() không phải là getString(some_data, 20) mà là gets(some_data), nếu người dùng gõ vào một xâu nhiều hơn 19 ký tự thì thảm họa sẽ xảy ra.

Các đề tài tương tự

  1. Trả lời: 0
    Bài viết cuối: 07-07-2013, 07:29 PM
  2. Lập trình C Làm sao để ghi và đọc cấu trúc tự trỏ trong tệp???
    Gửi bởi YangSock trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 8
    Bài viết cuối: 31-08-2012, 10:44 PM
  3. Bài tập về cấu trúc trong c | Cấu trúc sinh viên???
    Gửi bởi dddzzzjjjiii trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 14
    Bài viết cuối: 21-07-2012, 05:06 PM
  4. cấu trúc bảng băm là cấu trúc như thế nào?
    Gửi bởi minh_quang1202 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 06-01-2011, 07:03 PM
  5. Lập trình C Lỗi trong khi nhập mảng cấu trúc có họ tên sinh viên trong lập trình C?
    Gửi bởi trieuvan.n01 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 03-01-2011, 09:51 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn