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

Đề tài: Lỗi chỉ đọc dòng cuối cùng của file input

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

    Unhappy Lỗi chỉ đọc dòng cuối cùng của file input

    Mọi ngừoi xem hộ mình vs sao nó chỉ đọc mỗi dòng cuối cùng thôi..bỏ hết các dòng trước nó.nguy hiểm quá hic
    file txt co dang nay:
    3
    dh123 | nguyen tuan anh | 1 | 1990 | nam dinh | 8 | 8 | 8 | 24
    dh345 | mai van dung | 1 | 1991 | thanh hoa| 8 | 9 | 9 | 26
    dh456 | tran thi binh | 0 | 1989 | ha noi | 9 | 0 | 10 | 19

    Code:
    #include<iostream>
    #include <cstring>
    #include<iomanip>
    #include<stdlib.h>
    #include<fstream>
    using namespace std;
    
    typedef struct SINHVIEN {
        
        char Mts[10];
        char ht[30];
        bool GT;
        char Quequan[10];
        int nam;
        float toan,ly,hoa,TK;
    }SINHVIEN;
    
    typedef struct NODE {
        SINHVIEN Data;
        NODE* Next;
    }NODE;
    
    typedef struct LIST {
        NODE* Dau;
        NODE* Cuoi;
    }LISTSV;
    
    //Khoi tao NODE
    NODE* KhoitaoNode()
    {
        NODE* x = (NODE*)malloc(sizeof(NODE));
        if(x == NULL)
        {
            cout << "\n Bo nho khong du ";
            return 0;
        }
        x->Next = NULL;
        return x;
    }
    
    //Khoi tao danh sach LISTSV
    void KhoitaoList(LISTSV* x)
    {
        x->Dau = NULL;
        x->Cuoi=NULL;
    }
    
    //in thi sinh
    void InSV(NODE* p)
    {
        cout << p->Data.Mts << "  |  "
            << setw(15) << p->Data.ht << "  |  "
             << p->Data.GT  << "  |  "
             << p->Data.Quequan << "  |  "
              << p->Data.nam  << "  |  "
              << p->Data.toan << "  |  "
              << p->Data.ly  << "  |  "
              << p->Data.hoa << "  |  "
              << p->Data.TK << endl;
    }
    
    // in danh sach thi sinh
    void InDanhSach(LISTSV x)
    {
        NODE *p;
        p = x.Dau;
        while(p != NULL)
        {
            InSV(p);
            p = p->Next;
        }
    }
    
    //Them mot NODE vao Cuoi danh sach
    void ThemCuoi(LISTSV* x, NODE* t)
    {
        if(x->Dau == NULL)
        {
            x->Dau = t;
        }
       else
       {
           x->Cuoi->Next = t;
       }
       x->Cuoi = t;
    }
    //nhap thi sinh tu file
    void doctep( LISTSV *b, char *ttep, char a) 
    {
         char line[1000];
         char *temp;
         char ki_tu_cat[1];
         ki_tu_cat[0] = a;
         ki_tu_cat[1] = '\0';
         ifstream input(ttep);
         if(input == NULL )
         {
             return ;
         }
         while(1)
         {
             if(input.eof())
                 break;
             line[0] = '\0';
             input.getline(line,1000,'\n');
             if(strlen(line) > 0) 
             {
                     NODE * x = KhoitaoNode();//them o day de doc duoc het cac dong
    
                  temp = strtok(line,ki_tu_cat);
                  strcpy(x->Data.Mts,temp);
                  
                  temp = strtok(NULL,ki_tu_cat);
                  strcpy(x->Data.ht,temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  x->Data.GT == atoi(temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  x->Data.nam = atoi(temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  strcpy(x->Data.Quequan,temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  x->Data.toan = atoi(temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  x->Data.ly = atoi(temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  x->Data.hoa = atoi(temp);
                  
                  temp = strtok(NULL, ki_tu_cat);
                  x->Data.TK = atoi(temp);
    
               Themcuoi(b,x);//them ham nay nua
             }
         }  
    }
    
    void NhapTS_file(LISTSV *x)
    {
        NODE* a = KhoitaoNode();
        doctep(a,"TS.inp.txt",'|');
        ThemCuoi(x,a);
    
    }
    void ghitep(LISTSV x,char *ttep, char a)
    {
     ofstream outfile(ttep);
       NODE *p;
        p = x.Dau;
        while(p != NULL)
        {
          outfile << p->Data.Mts << "  |  "
            << setw(15) << p->Data.ht << "  |  "
             << p->Data.GT  << "  |  "
             << p->Data.Quequan << "  |  "
              << p->Data.nam  << "  |  "
              << p->Data.toan << "  |  "
              << p->Data.ly  << "  |  "
              << p->Data.hoa << "  |  "
              << p->Data.TK << endl;
              
            p = p->Next;
        }
    }
    
    //Giai phong bo nho
    void giaiphong(LISTSV *x)
    {
         if(x->Dau == NULL );
         else {
        NODE *p = x->Dau;
        NODE *a;
       while( p->Next != NULL)
        {
            a = p;
            p = p->Next;
            free(a);
        }
        }
    }
    
    int main()
    {
        int a;
        LISTSV x;
        KhoitaoList(&x);
        do
        {
            cout << "\n 1 - Nhap thi sinh tu file";
            cout << "\n 2 - Liet ke danh sach thi sinh";       
            cout << "\n 0 - Thoat";
            cout << "\n  An STT cong viec can thuc hien:";
            cin >> a;
            switch(a)
            {  
                case 1:
                    {
                         KhoitaoList(&x);
                         NhapTS_file(&x);                
                         ghitep(x,"TS.out.txt",'|');
                     
                        break;
                    }              
                    case 2:
                    {
                            InDanhSach(x);
                         break;
                    }
                    
            }
        }while((a >= 1) && (a <=2) );
         giaiphong(&x);
    }
    Đã được chỉnh sửa lần cuối bởi anhtuan105 : 08-05-2012 lúc 06:55 PM.

  2. #2
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    253

    Đọc cả file xong ghi vào 1 node :-?

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

    đọc từng dòng để xử lý.mỗi dòng chứa data cho 1 node..

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

    mình sửa đọc được hết các node rồi..nhưng bị cái lỗi là chí duy nhất giá trị:GT là bị sai,trong khi tất các giá trị khác đều đúng..mọi ng test thử dùm mình với(test thì bỏ số 3 trong file txt nhé )
    Tiện test giùm mình hàm tìmkiem này với,nếu list nhap từ bàn phím hàm vẫn chạy nhưng khi đọc từ file txt như code trên thì lại k chạy đựoc hàm timkiem hic
    Code:
    //Tim kiem theo Ma thi sinh
    void TimKiem(LIST *x , char *ma)
    {
        NODE *p;
        p = x->Dau;
        int count = 0;
        while(p != NULL)
        {
            if(strcmp(p->Data.Mts,ma) == 0)
            {
                InTS(p);
                count++;
            }
            p = p->Next;
        }
        if(count == 0) cout << "Khong tim thay!";
    }

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

  1. Bài tập C++ Đếm số lượng từ trong file input.txt và xuất ra file output.txt
    Gửi bởi tigon_b87 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 27
    Bài viết cuối: 02-05-2013, 06:46 PM
  2. Lấy 1 dòng ra từ file text và xóa dòng đó đi trong file cũ!!!
    Gửi bởi tranquang_hq trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 05-12-2012, 04:00 PM
  3. làm sao để upload file = <input type="file....
    Gửi bởi pvtam2a trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 16
    Bài viết cuối: 14-06-2012, 01:10 AM
  4. Thuật toán C++ Câu lệnh để lấy thông tin từ file input.txt
    Gửi bởi hiepsikid trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 4
    Bài viết cuối: 30-11-2011, 09:01 PM
  5. Làm sao để đọc dữ liệu input nhiều dòng trong C#
    Gửi bởi Coder_1340 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 10-06-2011, 09:43 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