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

Đề tài: Code nhập xuất file trên C, lỗi in ra toàn ô vuông, sửa thế nào?

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

    Mặc định Code nhập xuất file trên C, lỗi in ra toàn ô vuông, sửa thế nào?

    mình có bài tập nhỏ thế này.đọc một chuỗi số từ file và sau khi thao tác với chuỗi só đó xong thì ghi ra một file mới.đầu tiên mình cho đọc một file baitap.txt tử ổ đĩa D sao đó tìm các hoán vị của chuỗi số đó mà ghi ra file ketqua.txt nhưng sau nó toàn ghi ra ô vuông nhờ các bạn xem giùm mình có gì sai ở đoạn code này.
    C Code:
    1. #include "stdio.h"
    2. #include "conio.h"
    3. int docFile(int *&a)
    4. {
    5.     FILE *f;
    6.  
    7.     f=fopen("D:\\baitap.txt","r");  //doc file baitap.txt
    8.     int i=0; // cho biet so phan tu cua mang
    9.     while(!feof(f))
    10.     {
    11.         //fscanf(f,"%d",&a[i]);
    12.         a[i]=getw(f);
    13.         i++;
    14.     }
    15.     fclose(f);
    16.     return i+1;
    17. }
    18.  
    19. void luuFile(int *&a)
    20. {
    21.     FILE *f;
    22.     int i,temp=docFile(a);
    23.  
    24.     f=fopen("D:\\ketqua.txt","a");
    25.     for(i=0;i<temp;i++)
    26.     putw(a[i],f);
    27.     fclose(f);
    28.  
    29. }
    30. void hoanVi(int *&a)
    31. {
    32.     int temp=docFile(a);
    33.     int k;//luu lai gia tri cua i
    34.     for(int i=0;i<temp;i++)
    35.         for(int j=i+1;j<temp;j++)
    36.         {
    37.             a[k]=a[i];
    38.             a[i]=a[j];
    39.             a[j]=a[k];
    40.             luuFile(a);
    41.  
    42.         }
    43. }
    44. void main()
    45. {
    46.     clrscr();
    47.     int *a;
    48.     int temp;
    49.     temp=docFile(a);
    50.     fflush(stdin);
    51.     //luuFile(a);
    52.     hoanVi(a);
    53.     getch();
    54. }
    Đã được chỉnh sửa lần cuối bởi lethanh : 12-05-2009 lúc 08:45 PM.

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Code:
    getw(f);
    putw(a[i],f);
    Hai hàm này chỉ dùng nhập xuất theo kiểu nhị phân thôi mà bạn mở ở chế độ văn bản. Mà khi bạn mở file nhị phân ra bằng notepad (phải không bạn?) thì nó chỉ hiện các ô vuông do notepad không hiểu các số bạn muốn ghi là kí tự gì.
    Đã được chỉnh sửa lần cuối bởi trungkien45 : 11-05-2009 lúc 09:40 PM.

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

    mình đã thử thay 2 hàm getw(f) và putw() bằng getc và putc nhưng vẫn hiện ra ô vuông vậy làm sao để cho hiện được một dãy số trong notepad.

    mình đang cần gấp bài này để làm một số bài tập bạn nào biết chỉ mình với.

  4. #4
    Ngày gia nhập
    04 2009
    Bài viết
    6

    Bạn tham khảo nhé.

    C Code:
    1.  
    2. // readfile.cpp : Defines the entry point for the console application.
    3. //
    4.  
    5. #include "stdafx.h"
    6. #include <stdio.h>
    7. #include <stdlib.h>
    8.  
    9. void readFile(FILE* file, int **a, int *len);
    10. void permute(int *a, int len);
    11. void saveFile(FILE* file, int *a, int len);
    12.  
    13. int _tmain(int argc, _TCHAR* argv[])
    14. {
    15.     FILE *in_file;
    16.     FILE *out_file;
    17.     int *a;
    18.     int i, len;
    19.  
    20.     // Open files
    21.     in_file = fopen ("D:\\baitap.txt", "r+");
    22.     out_file = fopen ("D:\\ketqua.txt", "w+");
    23.  
    24.     // Check null files
    25.     if (NULL == in_file || NULL == out_file) {
    26.         return 0;
    27.     }
    28.  
    29.     // Read file
    30.     readFile(in_file, &a, &len);
    31.    
    32.     // Permute a
    33.     permute (a, len);
    34.  
    35.     // Save file
    36.     saveFile (out_file, a, len);
    37.  
    38.     free(a);
    39.  
    40.     // Close files
    41.     fcloseall ();
    42.  
    43.     return 0;
    44. }
    45.  
    46. void readFile(FILE* file, int **a, int *len)
    47. {
    48.     *len = 0;
    49.    
    50.     int i = 0;
    51.  
    52.     while (!feof(file))
    53.     {
    54.         fscanf(file, "%d", &i);
    55.         (*len)++;
    56.     }
    57.  
    58.     fseek(file, 0, SEEK_SET);
    59.  
    60.     *a = (int*)malloc(sizeof(int)* (*len));
    61.  
    62.     i = 0;
    63.     while (!feof(file))
    64.     {
    65.         fscanf(file, "%d", &(*a)[i]);
    66.         i++;
    67.     }
    68. }
    69.  
    70. void saveFile(FILE* file, int *a, int len)
    71. {
    72.     for (int i=0; i < len; i++)
    73.     {
    74.         fprintf(file, "%d ", a[i]);
    75.     }
    76. }
    77.  
    78. void permute(int *a, int len)
    79. {
    80.     int i, j;
    81.     int tmp;
    82.  
    83.     for(i = 0; i < len - 1; i++) {
    84.             for(j = i+1; j < len; j++) {
    85.                 tmp = a[i];
    86.                 a[i] = a[j];
    87.                 a[j] =tmp;
    88.             }
    89.     }
    90. }
    Đã được chỉnh sửa lần cuối bởi chinh : 12-05-2009 lúc 05:11 PM.

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

  1. Code xuất file từ resource dll, lỗi: xuất ra 1 file mà nó chẳng có gì cả
    Gửi bởi hsagduag trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 9
    Bài viết cuối: 07-11-2011, 12:26 AM
  2. hai code nhập xuất và ra kết quả y hệt nhau nhưng điểm trên spoj lại có một trong hai bị 0 điểm
    Gửi bởi Here i am trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 0
    Bài viết cuối: 11-09-2011, 05:01 PM
  3. Viết code copy file trên C như thế nào?
    Gửi bởi 12350 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 04-10-2010, 12:59 AM
  4. Nhập xuất file trên C++?
    Gửi bởi itleo31 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-04-2010, 03:16 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