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

Đề tài: Sửa lỗi danh sách sinh viên!

  1. #1
    Ngày gia nhập
    09 2012
    Bài viết
    1

    Mặc định Sửa lỗi danh sách sinh viên!

    Các bạn sửa giúp mình đoạn code danh sách sinh viên này. Mình việt rồi, không đạt yêu cấu, sửa thì lại vị lỗi. Mong các bạn hoàn thiện giúp mình.

    Code:
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct thongtin
    {
      char hoten[30];
      int tuoi; 
    }sv;
    
    sv *nhap (sv *p,int *n)
    {
      
      printf("\n Tong so sinh vien trong lop la: ");
      scanf("%d",n);   
      p=new sv[*n];
      printf("\nDANH SACH SINH VIEN\n");
      for(int i=0;i<*n;i++)
           {
            printf("\nSinh vien %d:",i+1);
            fflush(stdin);
            gets(p[i].hoten);
            printf("\nTuoi: ");
            scanf("%d",&p[i].tuoi);
           }
     return p;
    }
    
    void hienthi (sv *p,int *n)
    {
         printf("\nHien thi danh sach: ");
         for(int i=0;i<*n;i++)
            {
             printf("\nTen: %s",p[i].hoten);            
             printf("\nTuoi: %d",p[i].tuoi);            
            }
     getch();    
    }
    
    void sapxepten(sv *k,int *n)
    {
         sv *t; 
      for(int i=0;i<*n-1;i++)
           for(int j=i+1;j<*n;j++)
            {
             if(strcmp(k[i].hoten,k[j].hoten)>0)
                {
                 t=k[i];          // cho nay bi loi roi, mình muon dao ca cau truc,
                 k[i]=k[j];       // lan truoc minh dao moi ten, nen khi hien thi tuoi bi sai.
                 k[j]=t;
                }      
            }
            hienthi (k,n);
    }
    
    char *sapxepkieuvn(sv *p,int *n)
    {
      char * s[*n];
      char h[10];
      // tach lay ten
     for(int i=0;i<*n;i++)
       {
        int a=strlen(p[i].hoten);
        //printf("a[%d]= %d",i,a);
        for (int j=a;j>=0;j--)
            if(p[i].hoten[j]==' ') 
            {
             s[i]=&p[i].hoten[j+1];break;
            }
            printf("\n%s",s[i]);      
        }
        // sap xep theo ten
     for(int i=0;i<*n;i++)
        for(int j=i+1;j<=*n;j++)
           {
              if(strcmp(s[i],s[j])>0)
             {
              strcpy(h,s[i]);
              strcpy(s[i],s[j]);
              strcpy(s[j],h);                    
             }                        
            
           }
           // hien thi ca ho ten
     for(int i=0;i<*n;i++)
       {
        printf("\n%s",p[i].hoten);
        printf("\nTuoi: %d",p[i].tuoi);
       } 
    }
    int main()
    {
          sv *p;
          int *n=new int[1];
          while (1)
          {
            printf("\n\t\t DANH MUC LUA CHON\n");
            printf("\n1. Nhap danh sach.\n");
            printf("2. Hien thi danh sach.\n");
            printf("3. Sap xep danh sach.\n");
            printf("4. Sap xep kieu vn.\n");
            printf("0. Thoat khoi chuong trinh.");
            char ch=getch();
            switch(ch)
               {
                case '1': p=nhap (p,n); break;
                case '2': hienthi (p,n); 
                case '3': sapxepten(p,n); break; 
                case '4': sapxepkieuvn(p,n); break;
                // ngoai ra minh  muon sap xep cac ten trung nhau thi ai co tuoi cao hon thi dung truoc
                // vay phai lam the nao vay cac ban.
                case '0': exit(1); break;  
               } 
            
          }
    getch();      
    }

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

    chưa chạy thử code nữa, nhưng đọc qua thì hàm sapxepten sai ở chổ sv *p, đổi lại thành sv p thôi, thử xem
    Code is more than binary. Its poetry

  3. #3
    Ngày gia nhập
    11 2012
    Bài viết
    136

    chỗ sai 1. sv *t; phải là biến cấu trúc sao có thể là một con trỏ vì k[i] là giá trị biến cấu trúc cách viết khác là *(k+i) khác với (k+i) là địa chỉ của 1 biến cấu trúc thứ i. Bạn sửa lại đi chắc còn sai nhưng hôm nay ốm roài nên chịu.
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

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

    Trích dẫn Nguyên bản được gửi bởi kimcy1992 Xem bài viết
    chỗ sai 1. sv *t; phải là biến cấu trúc sao có thể là một con trỏ vì k[i] là giá trị biến cấu trúc cách viết khác là *(k+i) khác với (k+i) là địa chỉ của 1 biến cấu trúc thứ i. Bạn sửa lại đi chắc còn sai nhưng hôm nay ốm roài nên chịu.
    Cảm ơn nhé. Mình làm được rồi. Chúc bạn nhanh khỏe lại.

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

  1. Lập trình C++ Gặp lỗi lặp vô hạn khi xuất danh sách sinh viên trong code của bài danh sách sinh viên
    Gửi bởi boysieuda trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-05-2013, 04:57 PM
  2. Tạo danh sách sinh viên trên C++. Chỉnh sửa, xóa sinh viên thì làm thế nào?
    Gửi bởi hiepsiao trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 28-08-2011, 10:26 AM
  3. Quản lí sinh viên bằng stack dùng danh sách liên kết. Làm sao để nhập nhiều sinh viên?
    Gửi bởi hoainamken trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 24-08-2011, 10:34 AM
  4. Bài tập quản lý sinh viên trong lập trình C#. Tìm kiếm sinh viên in ra cả danh sách?
    Gửi bởi anhduc12c5 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 24-08-2011, 08:32 AM
  5. Chương trình quản lí sinh viên viết trong visual c++ 2010. Lỗi không chạy khi in danh sách sinh viên theo năm
    Gửi bởi hikaru1015 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 9
    Bài viết cuối: 03-06-2011, 09:31 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