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

Đề tài: Sự khác biệt giữa feof( fp ) == false và feof( fp ) != true

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

    Wink Sự khác biệt giữa feof( fp ) == false và feof( fp ) != true

    mình có code sau
    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3.  
    4. struct student
    5. {
    6.        char name[30];
    7.        int rullNumber, date;
    8. };
    9.  
    10. void swap( student* a, student* b )
    11. {
    12.      student temp = *a;
    13.      *a = *b;
    14.      *b = temp;
    15.  }
    16. int main()
    17. {
    18.     FILE* ip = NULL;
    19.     FILE* op = NULL;
    20.     ip = fopen( "input.txt", "r" );
    21.     op = fopen( "output.txt", "w" );
    22.      
    23.     student list[100];
    24.  
    25.     int n = 0;
    26.     for( ; feof(ip) == false; n++ )
    27.          fscanf( ip, "%[^;];%d;%d\n", list[n].name, &list[n].rullNumber, &list[n].date );
    28.      
    29.     for( int i = 0; i < n; i++ )
    30.          for( int j = 1; j < n; j++ )
    31.          {
    32.               int a, b;
    33.               a = (list[j-1].date%10000)*10000 + ((list[j-1].date/10000)%100)*100 + list[j-1].date/1000000;
    34.               b = (list[j].date%10000)*10000 + ((list[j].date/10000)%100)*100 + list[j].date/1000000;
    35.               if( a > b ) swap( &list[j], &list[j-1] );
    36.          }
    37.          
    38.     for( int i = 0; i < n; i++ )
    39.          fprintf( op, "%s;%d;%d\n", list[i].name, list[i].rullNumber, list[i].date );
    40.  
    41.     fclose( ip );
    42.     fclose( op );
    43.  
    44. }
    Cho hỏi là nếu thay cái đoạn code:
    C Code:
    1. for( ; feof(ip) == false; n++ )
    bằng
    C Code:
    1. for( ; feof(ip) != true; n++ )
    thì vòng for chạy vô hạn là sao ????

  2. #2
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Chào bạn!

    Theo như trong MSDN thì :
    The feof function returns a nonzero value if a read operation has attempted to read past the end of the file; it returns 0 otherwise.

    Có nghĩa là foef trả về một giá trị khác 0 nếu file được đọc đến cuối.

    Điều quan trọng là "giá trị khác 0" có thể là bất cứ giá trị nào chứ không nhất thiết là số 1 hoặc một số cụ thể nào (điều này phụ thuộc vào từng bộ thư viện của từng "hãng" khác nhau).
    Tương tự "true" được định nghĩa là một giá trị khác 0 còn "false" thì luôn là 0.
    Vì vậy khi bạn so sánh "feof(ip) != true" thì hiển nhiên là sẽ có thể sẽ không cho kết quả như mong muốn (như trong trường hợp lặp vô tận của bạn);

    "feof(ip) != true" xét cho cùng cũng chỉ là thao tác so sánh 2 số. Giả sử feof trả về 2,3,4 gì đó mà true đc định nghĩa là 1 thì thao tác so sánh "feof(ip) != true" luôn cho kết quả là true -> vòng lặp tiếp tục vô hạn.
    Đã được chỉnh sửa lần cuối bởi ngocbig™ : 09-05-2009 lúc 01:36 PM.

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

  1. Lập trình C cách kiểm tra của hàm feof(FILE *f)
    Gửi bởi huuson94 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 18-11-2013, 02:40 AM
  2. Kỹ thuật C ý nghĩa của hàm feof(f) là gì?
    Gửi bởi nasural trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-11-2013, 12:38 AM
  3. Cách làm việc của vòng lặp while(!feof(File)). giúp e
    Gửi bởi fanliver trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-07-2011, 08:24 AM
  4. Sử dụng hàm feof trong C như thế nào?
    Gửi bởi kimthanh14 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 29-04-2011, 02:12 PM
  5. Lockerz.com - True or False =>True
    Gửi bởi luboquanvu trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 24-12-2009, 08:50 AM

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