Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    thắc mắc về struct

    mình có bài tập về file là nhập vào số hs và xóa người có số điểm thấp nhất nhưng mình gặp rắc rối ở chỗ là khi mình khai báo kiểu dữ liệu điểm là float trong struct thì lúc in ra xem thì bị lỗi kiểu dữ liệu mình đã thử lại kiểu int và vẫn ko đc mọi người có thể giúp đỡ mình đc không
    đây là bài mình đang làm dở để kiểm tra và thấy bị lỗi rất mong mọi người giúp


    #include<stdio.h>
    #include<conio.h>
    FILE *f;
    int n,i;
    struct thuchanh {
    char ten[50];
    char so[25];
    float diem[25];
    }dem[50];
    thuchanh test=dem[50];
    void nhapdata();
    void in();
    void xoa();
    void thoat();

    void nhapdata(){
    f=fopen("e://thuchanh.txt","wb");
    printf("nhap vao so luong nguoi :
    ");
    scanf("%d",&n);
    for(i=0;i<n;i++){
    fflush(stdin);
    printf("So bao danh %d : ",i+1);
    gets(dem[i].so);
    fflush(stdin);
    printf("Ho & Ten : ");
    gets(dem[i].ten);
    fflush(stdin);
    printf("Diem : ");
    scanf("%f",&dem[i].diem);
    fflush(stdin);

    }
    for(i=0;i<n;i++){
    fwrite(dem[i].so,sizeof (struct thuchanh),n,f);
    fwrite(dem[i].ten,sizeof (struct thuchanh),n,f);
    fwrite(dem[i].diem,sizeof (struct thuchanh),n,f);
    }

    fflush(f);
    fclose(f);
    }
    void in(){
    f=fopen("e://thuchanh.txt","rb");
    if(n==0)
    perror("loi khong mo dc tep
    ");
    for(i=0;i<n;i++)
    fread(dem[i].so,sizeof(thuchanh),n,f);
    fread(dem[i].ten,sizeof(thuchanh),n,f);
    fread(dem[i].diem,sizeof(float),n,f);
    for(i=0;i<n;i++){
    printf("So bao danh %d %s:",i+1,dem[i].so);
    printf("Ho & Ten nguoi %d %s:",i+1,dem[i].ten);
    //printf("Diem cua nguoi thu %d %6.2f: ",i+1,dem[i].diem);
    printf("%6.2f",dem[i].diem);
    }
    }
    void xoa(){

    }
    void thoat(){

    }
    int main(){
    int chon;
    do{
    printf(" 1.Nhap du lieu
    ");
    printf(" 2.Xem du lieu
    ");
    printf(" 3.Xoa
    ");
    printf(" 4.Thoat
    ");
    printf("chon 1 so
    ");
    scanf("%d",&chon);



    switch (chon) {
    case 1: nhapdata();break;
    case 2: in();break;
    case 3: xoa();break;
    case 4:{thoat(); return 0;}
    }
    }
    while(1);
    }

  2. #2
    Turbo hay Borland phải ko [IMG]images/smilies/smile.png[/IMG]

  3. #3
    mình làm trên cfree sao vậy bạn lỗi thế là sao vậy

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    1. À, chỗ bạn ghi vào file thì bạn phải ghi đúng size của cái mà bạn định ghi.
    Đọc file tương tự.
    2. Khi bạn đọc file thì bạn phải đọc luôn n từ file mới đúng chứ.
    (Cho dù bạn để cho ng` dùng nhập thì bạn vẫn phải ghi n vào file để dễ kiểm soát)

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    1. À, chỗ bạn ghi vào file thì bạn phải ghi đúng size của cái mà bạn định ghi.
    Đọc file tương tự.
    2. Khi bạn đọc file thì bạn phải đọc luôn n từ file mới đúng chứ.
    (Cho dù bạn để cho ng` dùng nhập thì bạn vẫn phải ghi n vào file để dễ kiểm soát)
    hình như đấy k phải lỗi chính hay sao ý vì mình sửa rồi mà vẫn ko ok
    mình còn viết lại 1 đoạn khác nhỏ hơn để test nhưng mà k đc

    #include<stdio.h>
    #include<string.h>
    int main(){
    struct test{
    int a[50];
    char c[50];
    }dem[50];
    int x,y,i;
    printf("nhap vao so luong nguoi : ");
    scanf("%d",&x);
    for(i=0;i<x;i++){
    fflush(stdin);
    printf("nguoi thu %d ",i+1);
    gets(dem[i].c);
    fflush(stdin);
    printf("diem so nguoi thu %d ",i+1);
    scanf("%d%",&dem[i].a);
    }
    printf("da nhap
    :");
    for(i=0;i<x;i++){
    fflush(stdin);
    printf("ten nguoi %s :",dem[i].c);

    printf("diem so %d%",dem[i].a);
    }
    }

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    float diem[25]; -> float diem; thôi nhé.
    Vì string là 1 khái niệm* và đc biểu diễn bằng 1 mảng các char, nên phải ghi char[50] hay đại loại vậy.
    Lưu ý char[50] thì 49 char là max, vì còn char kết thúc nữa.

    Có vẻ như bạn ko xem kĩ phần đọc file nhị phân rồi.

    * C++ thì có std::string, nhưng bản chất string vẫn là khái niệm.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    float diem[25]; -> float diem; thôi nhé.
    Vì string là 1 khái niệm* và đc biểu diễn bằng 1 mảng các char, nên phải ghi char[50] hay đại loại vậy.
    Lưu ý char[50] thì 49 char là max, vì còn char kết thúc nữa.

    Có vẻ như bạn ko xem kĩ phần đọc file nhị phân rồi.

    * C++ thì có std::string, nhưng bản chất string vẫn là khái niệm.
    bạn có thể sửa lại để in đc ra màn hình không !! ý mình là lỗi kiểu int và float khi in ra ý

    - - - Nội dung đã được cập nhật ngày 07-05-2014 lúc 12:34 AM - - -

    mình tìm ra lỗi rồi khia báo struct {int a[50]} là sai và bị lỗi chỉ có int a thôi [IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •