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

Đề tài: Bài tập đọc file từ file txt có sẵn rồi lưu các giá trị vào mảng nội dung

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    1

    Smile Bài tập đọc file từ file txt có sẵn rồi lưu các giá trị vào mảng nội dung

    Mình có đoạn code sau:
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    #define MAX 100
    
    typedef struct
    {
    	char tenthisinh[30];
       char namsinh[5];
       float diemthi;
       char nganhhoc[20];
    } THISINH;
    
    void main()
    {
    	THISINH a[MAX];
    	char s[30];
       int i;
    	FILE *f;
    
    	f = fopen("THISINH.txt", "r");
    
       while (!feof(f))
       {
       	fscanf(f, "%d", &i);
          i = i - 1;
          printf("%3d", i + 1);
    
          fgets(s, 2, f);
    
          fgets(a[i].tenthisinh, 31, f);
          printf("%s", a[i].tenthisinh);
    
          fgets(s, 6, f);
    
          fgets(a[i].namsinh, 6, f);
          printf("%s", a[i].namsinh);
    
          fscanf(f, "%f", &a[i].diemthi);
          printf("%10.2f", a[i].diemthi);
    
          fgets(s, 2, f);
    
          fgets(a[i].nganhhoc, 21, f);
          printf("%s\n", a[i].nganhhoc);
    
          fgets(s, 1, f);
       }
    
       printf("%s", a[0].tenthisinh); // Ten thi sinh khong chinh xac, no di kem ca 1989
    
       getch();
    }
    Tên thí sinh trong lúc chạy vòng lặp lưu vào rồi in ngay thì hoạt động chính xác nhưng sau khi chạy hết vòng lặp lấy dữ liệu từ file txt thì bị lỗi, a[0].tenthisinh bị thừa mất " 1989", mình giải quyết mãi mà không được. Bạn nào giúp mình với :(. File txt và mã nguồn mình đính kèm bài viết
    Attached Files Attached Files

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

    C Code:
    1. fgets(a[i].tenthisinh, 31, f);

    Cái này bạn để sát quá nên không có chỗ để fgets điền ký tự NULL báo kết thúc xâu vào.
    Bạn thử giảm 31 xuống 30 xem.
    Hoặc:
    Nếu đề bài không quy định chặt chẽ thì bạn khai báo độ dài tối đa của tên lớn lên 1 chút cho thoải mái, 50 chẳng hạn. Khi đó thì bạn không cần dòng đọc bỏ 6 ký tự đầu đi nữa mà đọc luôn [I]fgets(a.tenthisinh, 40, f); là được

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

  1. Bài tập C++ [Socket][Transfer File]Send và Recv file dung lượng lớn >100MB bị treo dialog
    Gửi bởi bear_hoang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 28-05-2013, 11:50 PM
  2. làm sao để gửi nội dung có sẵn trong file text vào chương trình winword đang chạy
    Gửi bởi doveandrose trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 17-11-2012, 07:45 PM
  3. File backup .bak có dung lương lớn hơn file .mdb và file log
    Gửi bởi MYNAM trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 27-07-2012, 12:59 PM
  4. Thay đổi Icon của file phụ thuộc nội dung của file?
    Gửi bởi nam_dkn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 14-12-2010, 04:45 PM
  5. Đọc file text? Đọc file dung lượng lớn? Lỗi lưu kết quả khi đọc nhiều lần?
    Gửi bởi totoise trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2009, 08:21 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