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 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    ghi lên đầu tập tin

    em muốn ghi biến dem lên đầu file "ketqua.out.txt" thì làm thế nào ạ?
    em đọc tài liệu bảo dùng hàm fseek (); hay rewind(f); nhưng vẫn không ghi lên đầu tệp mà vẫn ở cuối tệp +_+. ví dụ bài này ạ:

    Mã:
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    #include <fstream.h>
    int   a[100];
    int   daySo[100];
    int k, n,dem=0;
    int    kiemTra(int k)
    {
       int tong =0;    
       for (int i = 1; i<=n; i++)
         tong = tong + a[i]*daySo[i];
       if (tong ==k) return 1;
       return 0;    
    }
    
    void    ketQua()
    {    
        if (kiemTra(k)) 
        { dem++;
          for (int i=1; i<=n; i++)
            if (a[i]==1) cout<<daySo[i]<<"   ";
          cout<<endl;
        }
    }
    
    void     nhiPhan(int m)
    { 
       for (int i=0; i<=1; i++)
       {
           a[m]=i;
           if (m==n) ketQua();
             else nhiPhan(m+1);
       }      
    }
    
    void    nhapDuLieu()
    {
        cin>>n>>k;
        for (int i=1; i<=n; i++) cin>>daySo[i];   
        
    }
     main()
    {
    	freopen("dayso.in.txt","r",stdin); freopen("ketqua.out.txt","w",stdout);
       nhapDuLieu();FILE *f1;cout<<"
    ";
       nhiPhan(1);
      f1=fopen("ketqua.out.txt","a");
      rewind(f1);
      fprintf(f1,"
     So cac cap tim duoc la: %d",dem);
      fclose(f1);
    }
    nó hiển thị trong file "ketqua.out" là:

    Mã:
    20   30   
    15   35   
    10   15   25   
    5   20   25   
    5   15   30   
    5   10   35   
    5   10   15   20   
    
     So cac cap tim duoc la: 7
    Làm thế nào cho cái dòng So cac cap tim duoc la: 7 lên được vị trí đầu ạ? em gà quá, đọc sách mà vẫn chả hiểu mong mọi người giúp với ạ. (nếu không dùng C++ thì C cũng được ạ. miễn cho cái dòng kia nó lên đầu thui ạ)

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mọi người ơi giúp em với [IMG]images/smilies/21.gif[/IMG][IMG]images/smilies/21.gif[/IMG][IMG]images/smilies/21.gif[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi maitrung
    em muốn ghi biến dem lên đầu file "ketqua.out.txt" thì làm thế nào ạ?
    em đọc tài liệu bảo dùng hàm fseek (); hay rewind(f); nhưng vẫn không ghi lên đầu tệp mà vẫn ở cuối tệp +_+. ví dụ bài này ạ:

    Mã:
    #include <iostream.h>
    #include <conio.h>
    #include <stdio.h>
    #include <fstream.h>
    int   a[100];
    int   daySo[100];
    int k, n,dem=0;
    int    kiemTra(int k)
    {
       int tong =0;    
       for (int i = 1; i<=n; i++)
         tong = tong + a[i]*daySo[i];
       if (tong ==k) return 1;
       return 0;    
    }
    
    void    ketQua()
    {    
        if (kiemTra(k)) 
        { dem++;
          for (int i=1; i<=n; i++)
            if (a[i]==1) cout<<daySo[i]<<"   ";
          cout<<endl;
        }
    }
    
    void     nhiPhan(int m)
    { 
       for (int i=0; i<=1; i++)
       {
           a[m]=i;
           if (m==n) ketQua();
             else nhiPhan(m+1);
       }      
    }
    
    void    nhapDuLieu()
    {
        cin>>n>>k;
        for (int i=1; i<=n; i++) cin>>daySo[i];   
        
    }
     main()
    {
    	freopen("dayso.in.txt","r",stdin); freopen("ketqua.out.txt","w",stdout);
       nhapDuLieu();FILE *f1;cout<<"
    ";
       nhiPhan(1);
      f1=fopen("ketqua.out.txt","a");
      rewind(f1);
      fprintf(f1,"
     So cac cap tim duoc la: %d",dem);
      fclose(f1);
    }
    nó hiển thị trong file "ketqua.out" là:

    Mã:
    20   30   
    15   35   
    10   15   25   
    5   20   25   
    5   15   30   
    5   10   35   
    5   10   15   20   
    
     So cac cap tim duoc la: 7
    Làm thế nào cho cái dòng So cac cap tim duoc la: 7 lên được vị trí đầu ạ? em gà quá, đọc sách mà vẫn chả hiểu mong mọi người giúp với ạ. (nếu không dùng C++ thì C cũng được ạ. miễn cho cái dòng kia nó lên đầu thui ạ)
    Cái này vui nhan!
    f1=fopen("ketqua.out.txt","a"); chỗ này bạn dùng "a" thì nó chỉ in vao cuối thôi!
    đơn giản hơn bạn viết cái dem trước rồi viết cái gigi đó sau thì khỏi nghĩ ngợi!

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cách 1: Bạn read cả file ra 1 cái buffer, xóa file đó đi, chỉnh sửa chèn đè xóa trên buffer đó. Tạo ra 1 file như cũ, ghi buffer đó vào file.
    Cách 2: Học sử dụng mấy hàm:

    Linux: sử dụng các hàm open(), read(), write, close(), lseek(), fcntl() (dùng lock file)
    Windows: sử dụng các hàm open(), read(), write(), _lseek(), _locking()

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @thai_thinh:
    nói thế thì tớ không hỏi làm gì vì bài này tớ làm nó in ra hết các cách nó mới đếm tổng số cách nên biến dem ra sau mà yêu cầu bài thì phải hiển thị ở đầu tệp ??? bạn thử sửa luôn hộ cái bài này cho tớ với

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @namdq2k : có thể cho tớ cái code cho cụ thể hơn không? tớ không hiểu, tớ làm trên window trên Dev.C++- 4.9.9.2

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    [IMG]images/smilies/clap_grin.gif[/IMG] cám ơn bạn nha @thai_thinh [IMG]images/smilies/biggrin.png[/IMG] mình sẽ tham khảo.(cách thứ 2 đơn giản thật mà còn chuẩn nữa ^^)

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi maitrung
    @thai_thinh:
    nói thế thì tớ không hỏi làm gì vì bài này tớ làm nó in ra hết các cách nó mới đếm tổng số cách nên biến dem ra sau mà yêu cầu bài thì phải hiển thị ở đầu tệp ??? bạn thử sửa luôn hộ cái bài này cho tớ với
    Cách 1:
    Mã:
    void    ketQua(){        if (kiemTra(k))     {      for (int i=1; i<=n; i++)        if (a[i]==1) cout<<daySo[i]<<"   ";      cout<<endl;    }}void     Dem(int m){    for (int i=0; i<=1; i++)   {       a[m]=i;       if (m==n) dem++;   }      }
    Lưu ý: Mình chưa kĩ code của bạn! mình viết dựa trên code của bạn
    Ý tưởng của cách này là! bạn viết một hàm đếm riêng. rồi in biến đếm trước... đừng nên viết phụ thuộc dễ làm rối trí... hii

    Cách 2: (đơn giản hơn)

    Mã:
    main(){    freopen("dayso.in.txt","r",stdin); freopen("ketqua.out.txt","w",stdout);   nhapDuLieu();FILE *f1;cout<<"
    ";  fprintf(f1,"
     So cac cap tim duoc la:             ");//chỗ này cho nhiêu khoảng trắng để đảm bảo in đủ số!   nhiPhan(1);  f1=fopen("ketqua.out.txt","r+");//Lưu ý chỗ này không phải là "a" nữa  rewind(f1);  fprintf(f1,"
     So cac cap tim duoc la: %d",dem);  fclose(f1);}
    Ý tưởng này đơn giản là bạn in trước cái câu khai báo, rồi sau đó dịch chuyển về đầu file in chồng lên!!!

    Cách 3: là bạn đọc hết file lại rồi xóa file đi in dem rồi in lại file;
    VD:

    Mã:
    #include <stdio.h>#include <conio.h>#define MAX 100void Luu(char s[][MAX],int &n,char tenf[]){    n = 0;//cho chắc ăn.    FILE* f  = fopen(tenf,"r");    if(!f)return;    while(!feof(f))        fgets(s[n++],MAX,f);    fclose(f);    } void Ghi(char s[][MAX],int n,char tenf[]){    FILE *f = fopen(tenf,"a");    int i = 0;    while(i<n)        fprintf(f,"%s",s[i++]);    fclose(f);} void main(){    char s[MAX][MAX];    int n;    Luu(s,n,"output.txt");    FILE*   f = fopen("output.txt","w");    fprintf(f,"So cac cap tim duoc la: 7
    ");    fclose(f);    Ghi(s,n,"output.txt");}
    Chương trình này chỉ là ví dụ đơn giản cho bạn dễ hiểu thôi nha!
    còn nhiều code hay hơn![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
  •