Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: struct quản lý sinh vien sai chổ nào?

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

    Mặc định struct quản lý sinh vien sai chổ nào?

    mình đang làm struct quản lý sinh viên
    đơn giản chỉ là nhập sinh viên và sau đó tìm kiếm sinh viên dựa vào mã sv
    mình biên dịc thì nó ko báo lổi nhưng khi chạy thì ko đúng yêu cầu
    mình nhập vào mã sinh viên cần tìm mà nó ko ra gì hết
    các bạn xem dùm mình nha
    đây là code của mình
    Code:
    #include <stdio.h>
    #include <conio.h>
    struct sinhvien
    {
    	char masv[8];
    	char hoten[30];
    	char gioitinh[5];
    	char diachi[50];
    	char timsv[8];
    	float toan;
    	float anhvan;
    	float van;
    	float dia;
    	float su;
    	float ly;
    };
    typedef struct sinhvien SINHVIEN;
    void NhapSv(SINHVIEN HOSO[150],int &n)
    {
    	printf("Ban muon nhap bao nhieu sinh vien: ");
    	scanf("%d",&n);
    	fflush(stdin);
    	for(int i=1;i<=n;i++)
    	{
    		printf("\n");
    		printf("Ma SV: ");
    		gets(HOSO[i].masv);
    		printf("Ho Va Ten: ");
    		gets(HOSO[i].hoten);
    		printf("Gioi Tinh: ");
    		gets(HOSO[i].gioitinh);
    		printf("Dia Chi: ");
    		gets(HOSO[i].diachi);
    		printf("Diem Mon Hoc.\n");
    		printf("Toan: ");
    		scanf("%f",&HOSO[i].toan);
    		printf("Anh Van: ");
    		scanf("%f",&HOSO[i].anhvan);
    		printf("Van: ");
    		scanf("%f",&HOSO[i].van);
    		printf("Dia: ");
    		scanf("%f",&HOSO[i].dia);
    		printf("Su: ");
    		scanf("%f",&HOSO[i].su);
    		printf("Ly: ");
    		scanf("%f",&HOSO[i].ly);
    		fflush(stdin);
    	}
    }
    void XuatSv(SINHVIEN HOSO[150],int i)
    {
    	printf("\n");
    	printf(HOSO[i].masv);
    	printf("\n");
    	printf(HOSO[i].hoten);
    	printf("\n");
    	printf(HOSO[i].gioitinh);
    	printf("\n");
    	printf(HOSO[i].diachi);
    	printf("\n");
    	printf("%1.2f",HOSO[i].toan);
    	printf("\n");
    	printf("%1.2f",HOSO[i].anhvan);
    	printf("\n");
    	printf("%1.2f",HOSO[i].van);
    	printf("\n");
    	printf("%1.2f",HOSO[i].dia);
    	printf("\n");
    	printf("%1.2f",HOSO[i].su);
    	printf("\n");
    	printf("%1.2f",HOSO[i].ly);
    	printf("\n");
    }
    void TimSv(SINHVIEN HOSO[150],int n)
    {
    	char timsv[8];
    	printf("Nhap Ma SV Can Tim: ");
    	gets(timsv);
    	for(int i=1;i<=n;i++)
    		if(timsv==HOSO[i].masv)
    			XuatSv(HOSO,i);
    	
    }
    void main()
    {
    	int n;
    	SINHVIEN sv[150];
    	NhapSv(sv,n);
    	TimSv(sv,n); 
    	getch();
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    01 2008
    Bài viết
    41

    Code:
    (SINHVIEN HOSO[150],int &n)
    Có thể là do chỗ này.

    Code:
    printf("Ma SV: ");
    		gets(HOSO[i].masv);
    		printf("Ho Va Ten: ");
    		gets(HOSO[i].hoten);
    Và chố này

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

    Dùng compiler nào ? Error đâu cậu ?

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    224

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. struct sinhvien
    4. {
    5.     char masv[8];
    6.     char hoten[30];
    7.     char gioitinh[5];
    8.     char diachi[50];
    9.     char timsv[8];
    10.     float toan;
    11.     float anhvan;
    12.     float van;
    13.     float dia;
    14.     float su;
    15.     float ly;
    16. };
    17. typedef struct sinhvien SINHVIEN;
    18. void NhapSv(SINHVIEN HOSO[150],int &n)
    19. {
    20.     printf("Ban muon nhap bao nhieu sinh vien: ");
    21.     scanf("%d",&n);
    22.     fflush(stdin);
    23.     for(int i=1;i<=n;i++)
    24.     {
    25.         printf("\n");
    26.         printf("Ma SV: ");
    27.         gets(HOSO[i].masv);
    28.         printf("Ho Va Ten: ");
    29.         gets(HOSO[i].hoten);
    30.         printf("Gioi Tinh: ");
    31.         gets(HOSO[i].gioitinh);
    32.         printf("Dia Chi: ");
    33.         gets(HOSO[i].diachi);
    34.         printf("Diem Mon Hoc.\n");
    35.         printf("Toan: ");
    36.         [COLOR="Red"]scanf("%f",&HOSO[i].toan);[/COLOR] // sai o cho nay
    37.         printf("Anh Van: ");
    38.         scanf("%f",&HOSO[i].anhvan);
    39.         printf("Van: ");
    40.         scanf("%f",&HOSO[i].van);
    41.         printf("Dia: ");
    42.         scanf("%f",&HOSO[i].dia);
    43.         printf("Su: ");
    44.         scanf("%f",&HOSO[i].su);
    45.         printf("Ly: ");
    46.         scanf("%f",&HOSO[i].ly);
    47.         fflush(stdin);
    48.     }
    49. }
    50. void XuatSv(SINHVIEN HOSO[150],int i)
    51. {
    52.     printf("\n");
    53.     printf(HOSO[i].masv);
    54.     printf("\n");
    55.     printf(HOSO[i].hoten);
    56.     printf("\n");
    57.     printf(HOSO[i].gioitinh);
    58.     printf("\n");
    59.     printf(HOSO[i].diachi);
    60.     printf("\n");
    61.     printf("%1.2f",HOSO[i].toan);
    62.     printf("\n");
    63.     printf("%1.2f",HOSO[i].anhvan);
    64.     printf("\n");
    65.     printf("%1.2f",HOSO[i].van);
    66.     printf("\n");
    67.     printf("%1.2f",HOSO[i].dia);
    68.     printf("\n");
    69.     printf("%1.2f",HOSO[i].su);
    70.     printf("\n");
    71.     printf("%1.2f",HOSO[i].ly);
    72.     printf("\n");
    73. }
    74. void TimSv(SINHVIEN HOSO[150],int n)
    75. {
    76.     char timsv[8];
    77.     printf("Nhap Ma SV Can Tim: ");
    78.     gets(timsv);
    79.     for(int i=1;i<=n;i++)
    80.         if(timsv==HOSO[i].masv)
    81.             XuatSv(HOSO,i);
    82.    
    83. }
    84. void main()
    85. {
    86.     int n;
    87.     SINHVIEN sv[150];
    88.     NhapSv(sv,n);
    89.     TimSv(sv,n);
    90.     getch();
    91. }

    Mình nhớ là đối với kiểu dữ liệu số thì ngoại trừ kiểu số nguyên ra , các kiểu còn lại ( số thực , ... ) ko được trực tiếp nhập vào một cấu trúc . Phải thông qua một biến trung gian . Bạn thử sửa lại là :

    C Code:
    1. float toan;
    2.  scanf("%f",&toan);
    3.  HOSO[i].toan=toan;

    Mình còn lưu ý bạn chỗ này :

    C Code:
    1. if(timsv==HOSO[i].masv)
    2.             XuatSv(HOSO,i);
    Bạn ko nên so sánh 2 chuỗi như vậy mà nên dùng
    C Code:
    1. strcmp(timsv,HOSO[i].masv);

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    126

    mình dùng vc++2006
    cái này ko có error RR à
    nhưng mà khi chạy nó chó nhập dữ liệu vào
    nhập xong thì nó hiện lên dòng
    Nhập mã sinh vien cần tìm
    nhưng mà khi mình nhập vào mã sinh viên để tìm thì nó ko hiện ra cái gì cả
    tức là nó ko tìm dc thông tin của sinh viên mặc dù nhập đúng
    Code:
    void TimSv(SINHVIEN HOSO[150],int n)
    {
    	char timsv[8];
    	printf("Nhap Ma SV Can Tim: ");
    	gets(timsv);
    	for(int i=1;i<=n;i++)
    		if(timsv==HOSO[i].masv)
    			XuatSv(HOSO,i);
    	
    }
    hình như dòng này của mình bị sai
    vì khi mình thử lại kiểu dữ liệu cho mã sinh viên của cả bài la là kiểu int thì nó lại tìm dc
    Code:
    int timsv;
    	printf("Nhap Ma SV Can Tim: ");
    	scanf("%d",&timsv);

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

    Mặc định struct quản lý sinh vien sai chổ nào?

    Có rất nhiều chỗ cậu mix giữa scanf và gets(), dễ làm trôi buffer lắm. Vì khi nhập int phím enter sẽ dính lại. Nên tập làm quen với cấu trúc này :
    C Code:
    1. fprintf(stdout, "\n * a string : ");
    2. fgets(ss.d_char, 29, stdin);
    3. fprintf(stdout, "\n * an int : ");
    4. fscanf(stdin, "%d", &ss.d_int);
    5. fflush(stdin);
    Không nên xài void main(), dẹp nó đi, dùng int main().

    Và chỗ quan trọng thì con bé pro-evolution nó nói ở trên rùi đó
    C Code:
    1. if(strcmp(timsv, HOSO[i].masv))

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

    Trích dẫn Nguyên bản được gửi bởi sieuphuong Xem bài viết
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. struct sinhvien
    4. {
    5.     char masv[8];
    6.     char hoten[30];
    7.     char gioitinh[5];
    8.     char diachi[50];
    9.     char timsv[8];
    10.     float toan;
    11.     float anhvan;
    12.     float van;
    13.     float dia;
    14.     float su;
    15.     float ly;
    16. };
    17. typedef struct sinhvien SINHVIEN;
    18. void NhapSv(SINHVIEN HOSO[150],int &n)
    19. {
    20.     printf("Ban muon nhap bao nhieu sinh vien: ");
    21.     scanf("%d",&n);
    22.     fflush(stdin);
    23.     for(int i=1;i<=n;i++)
    24.     {
    25.         printf("\n");
    26.         printf("Ma SV: ");
    27.         gets(HOSO[i].masv);
    28.         printf("Ho Va Ten: ");
    29.         gets(HOSO[i].hoten);
    30.         printf("Gioi Tinh: ");
    31.         gets(HOSO[i].gioitinh);
    32.         printf("Dia Chi: ");
    33.         gets(HOSO[i].diachi);
    34.         printf("Diem Mon Hoc.\n");
    35.         printf("Toan: ");
    36.         [COLOR="Red"]scanf("%f",&HOSO[i].toan);[/COLOR] // sai o cho nay
    37.         printf("Anh Van: ");
    38.         scanf("%f",&HOSO[i].anhvan);
    39.         printf("Van: ");
    40.         scanf("%f",&HOSO[i].van);
    41.         printf("Dia: ");
    42.         scanf("%f",&HOSO[i].dia);
    43.         printf("Su: ");
    44.         scanf("%f",&HOSO[i].su);
    45.         printf("Ly: ");
    46.         scanf("%f",&HOSO[i].ly);
    47.         fflush(stdin);
    48.     }
    49. }
    50. void XuatSv(SINHVIEN HOSO[150],int i)
    51. {
    52.     printf("\n");
    53.     printf(HOSO[i].masv);
    54.     printf("\n");
    55.     printf(HOSO[i].hoten);
    56.     printf("\n");
    57.     printf(HOSO[i].gioitinh);
    58.     printf("\n");
    59.     printf(HOSO[i].diachi);
    60.     printf("\n");
    61.     printf("%1.2f",HOSO[i].toan);
    62.     printf("\n");
    63.     printf("%1.2f",HOSO[i].anhvan);
    64.     printf("\n");
    65.     printf("%1.2f",HOSO[i].van);
    66.     printf("\n");
    67.     printf("%1.2f",HOSO[i].dia);
    68.     printf("\n");
    69.     printf("%1.2f",HOSO[i].su);
    70.     printf("\n");
    71.     printf("%1.2f",HOSO[i].ly);
    72.     printf("\n");
    73. }
    74. void TimSv(SINHVIEN HOSO[150],int n)
    75. {
    76.     char timsv[8];
    77.     printf("Nhap Ma SV Can Tim: ");
    78.     gets(timsv);
    79.     for(int i=1;i<=n;i++)
    80.         if(timsv==HOSO[i].masv)
    81.             XuatSv(HOSO,i);
    82.    
    83. }
    84. void main()
    85. {
    86.     int n;
    87.     SINHVIEN sv[150];
    88.     NhapSv(sv,n);
    89.     TimSv(sv,n);
    90.     getch();
    91. }

    Mình nhớ là đối với kiểu dữ liệu số thì ngoại trừ kiểu số nguyên ra , các kiểu còn lại ( số thực , ... ) ko được trực tiếp nhập vào một cấu trúc . Phải thông qua một biến trung gian . Bạn thử sửa lại là :

    C Code:
    1. float toan;
    2.  scanf("%f",&toan);
    3.  HOSO[i].toan=toan;

    Mình còn lưu ý bạn chỗ này :

    C Code:
    1. if(timsv==HOSO[i].masv)
    2.             XuatSv(HOSO,i);
    Bạn ko nên so sánh 2 chuỗi như vậy mà nên dùng
    C Code:
    1. strcmp(timsv,HOSO[i].masv);
    Đúng roài. Không thể so sánh 2 chuỗi theo cách như 2 số dc. Phải dùng hàm strcmp mới dc. Còn cách sử dụng thì bạn cứ tự tìm hiểu, dễ lém.

  8. #8
    Ngày gia nhập
    03 2008
    Bài viết
    126

    thank RR và sieuphuong nha
    mình làm ok rồi

  9. #9
    Ngày gia nhập
    04 2008
    Bài viết
    10

    Thứ nhất mình góp ý như sau: hàm tìm và tất cả các hàm khác ngoài hàm main ko nên để làm nhiều công việc như vậy! Tìm là chỉ tìm ko nên viết gì trong đó cả, viết là việc của hàm Xuat, gọi là việc của hàm main.
    Thứ hai tìm kiếm nên trả về vị trí ko nên trả về giá trị.
    Thứ ba hình như hàm tìm của bạn thiếu {}

  10. #10
    Ngày gia nhập
    04 2008
    Bài viết
    10

    Biến n bạn khai báo ở hàm main mà! Sao lại gọi ở hàm nhập vậy, khi ra ngoài thì n bằng bao nhiêu! Bạn để nhập n ở hàm main đi!
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Mã nguồn C Lỗi struct về quản lý sinh viên bị lỗi
    Gửi bởi thienbg93 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 23-05-2013, 12:21 AM
  2. cấu trúc struct quản lí sinh viên
    Gửi bởi darelove trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 25-03-2011, 11:03 PM
  3. tính điểm TB của từng sinh vien trong mảng Sinh viên
    Gửi bởi vucong231987 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 05-08-2010, 09:52 AM
  4. struct sinh vien trên C
    Gửi bởi I.Q.B trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 20-12-2009, 10:42 PM
  5. Quản Lý Sinh Viên đơn giản<Struct>
    Gửi bởi tongtrang trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 19-03-2009, 02:32 PM

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