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

Đề tài: xin giải thích dùm lỗi treo máy !

  1. #1
    Ngày gia nhập
    05 2007
    Bài viết
    6

    Mặc định xin giải thích dùm lỗi treo máy !

    mình đang làm bài tập ghi các câu hỏi trên một tập vào cấu trúc ,nhưng khi chạy nó treo máy ,đoạn code :
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct
    {
    int cau; //vi tri cau (thu 1,2,3.....
    int size; //cho biet kich thuoc 1 cau hoi
    char nd[10000];
    }cauhoi;
    cauhoi dulieu[50];
    int i=1;
    //--------------------------------------------------------------------------
    void napch(void)
    {
    char c;
    int j;
    FILE *f;
    f=fopen("dulieu.txt","rb");
    if(f==NULL)
    {printf("\n khong mo duoc du lieu ");
    getch();
    exit(1);
    }
    while(!feof(f))
    { j=1;
    dulieu[i].cau=i;
    while((c=fgetc(f))!='*')
    {
    dulieu[i].nd[j]=c;
    fseek(f,0,1);
    dulieu[i].size=ftell(f);
    j++;
    }
    if(c=='*')
    i++;
    }
    }
    //---------------------------------------------------------------------------
    main()
    {
    int j,k;
    napch();
    for(j=1;j<=i;j++)
    {
    printf("\n cau %d",dulieu[j].cau);
    printf("\n dung luong :%d",dulieu[j].size);
    printf("\n noi dung :");
    for(k=0;k<dulieu[j].size;k++)
    printf("%c",dulieu[j].nd[k]);
    }
    getch();
    }
    tập " dulieu.txt" có dạng sau:
    cau 1 > cho biet doi bong nao vo dich worlcup 2006
    a> duc b> italy c>anh d> brasil
    *cau2 > cho biet cau lac bo nao vo dich cup c1 2006
    a> liverpool b> chelsea c> ac milan d> manchester unt
    *cau3 > cho biet cau thu nao viet nam duoc binh chon xuat sac nhat nam 2006
    a> cong vinh b> bao khanh c> van quyen d> quoc vuong
    *cau4 > cho biet cau lac bo nao vo dich mua giai 2005-2006
    a> gach dtla b> binh duong c>hoang anh gia lai d>song lam nghe an
    xin chỉ dùm mình đang rất cần để làm bài trắc nghiệm đó mà

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Code:
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct
    {
    int cau; //vi tri cau (thu 1,2,3.....
    int size; //cho biet kich thuoc 1 cau hoi
    char nd[10000];
    }cauhoi;
    cauhoi dulieu[50];
    int i=1;
    //--------------------------------------------------------------------------
    void napch(void)
    {
    char c;
    int j;
    FILE *f;
    f=fopen("dulieu.txt","rb");
    
    if(f==NULL){//Kiem Tra Ton Tai FILE
    	printf("\n khong mo duoc du lieu ");
    	getch();
    	exit(1);
    }
    c=!EOF;
    while(c!=EOF)//Su Ly Viec Nap Du Lieu u File.
    { j=0;
    	dulieu[i].cau=i;
    	while(c!=EOF&&(c=fgetc(f))!='*')
    	{
    		dulieu[i].nd[j]=c;
    		/*fseek(f,0,1); Cai nay khong biet de lam gi?
    		dulieu[i].size=ftell(f);*/
    		j++;
    	}
    	i++;
    }
    }
    //---------------------------------------------------------------------------
    main()
    {
    int j,k;
    napch();
    for(j=1;j<i;j++){
    	printf("\n cau %d",dulieu[j].cau);
    	printf("\n dung luong :%d",sizeof(dulieu[j]));
    	/*Cau truc dulieu cua cau dau co' dong dau nen kich thuot cau nao cung bang nhau*/
    	printf("\n noi dung : \n%s",dulieu[j].nd);
    }
    getch();
    }
    Test bài cậu mệt thiệt: (không ghi chú+không canh hàng)
    Lời khuyên:
    nội dung nên là một con trỏ. ==>xây dựng lại cấu trúc dữ liệu
    biến size không cần viết thêm hàm getsize(const cauhoi* h) {return sizeof(char)*strlen(h->nd);}
    biến cau trong cấu trúc vô nghĩa không linh hoạt, nếu muốn tường minh cậu thêm macau thi hay hơn nhưng tôi nghĩ trong trường hợp này không cần.
    Tóm lại Edit cấu trúc của cậu là vậy nè;
    Code:
    typedef struct cauhoi{
        char *nd;
    };
    Đã được chỉnh sửa lần cuối bởi shinichi_haha : 26-05-2007 lúc 06:54 PM.

    OoShinHaoO

  3. #3
    Ngày gia nhập
    05 2007
    Bài viết
    6

    hic! cám ơn bác,lúc đầu em không nghĩ tới cái hàm sizeof() nên dùng hàm fseek(FILE *f,long sb,xp) và ftell(f) de xac định size của nó ,bác có thể chỉ rõ hơn về lời khuyên của bác ,chỗ hàm getsize(const cauhoi*h)

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

  1. Con trỏ trên C Giải thích dùm mình 2 dấu **p là gì ?
    Gửi bởi yachi_emiko trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 29-06-2012, 05:21 PM
  2. Giải thích dùm em với!
    Gửi bởi Kim Thoa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 29-10-2007, 09:17 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