可否解釋問題中while迴圈內的語意,謝謝。

#include <stdio.h>

#include <stdlib.h>

#define MAX 10000

int main(void)

{

FILE *fptr;

char str[MAX];

int bytes; /* 存放fread()成功讀取的字元數 */

fptr=fopen("c:\\dev-cpp\\copy test c.txt","r");

while (!feof(fptr))/* 如果還沒讀到檔尾,未到檔尾foef其值為0 */

{

bytes=fread(str,sizeof(char),MAX,fptr); /* ???不懂函數fread=bytes後,bytes內是甚麼 */

if(bytes<MAX) /* ??? bytes為何跟MAX比較 */

str[bytes]='\0';

printf("%s\n",str); /* 印出檔案內容 */

}

fclose(fptr);/* 關閉檔案 */

system("pause");

return 0;

}

可否解釋while迴圈內的語意,謝謝。

已更新項目:

請問prisoner26535

根據bytes=fread(str,sizeof(char),MAX,fptr);

你的意思是說:

fread讀到fptr中的幾個位元組的數量後,一次全放入bytes的變數中嗎??

謝謝。

1 個解答

評分
  • 8 年前
    最佳解答

    bytes=fread(str,sizeof(char),MAX,fptr); /* bytes內是fread() 所讀到的幾個byte的數量 */

    if(bytes<MAX) /*bytes為何跟MAX比較? 因為若是沒有讀滿格的話我要放一個'\0'來結尾才可以印出 */

    str[bytes]='\0';

    printf("%s\n",str); /* 印出檔案內容 ---- 但是若是讀滿格的話妳的程式就要爆了 妳改改看吧 不難的*/

    2012-08-26 21:54:30 補充:

    // 另外建議 妳這樣寫fread()

    bytes = fread(str, sizeof(str[0]), sizeof(str) - 1, fptr);

    str[bytes] = '\0';

    // 為神要醬 妳就自己想吧

    2012-08-26 22:03:34 補充:

    fread讀到fptr中的幾個位元組的數量後,一次全放入bytes的變數中嗎??

    yes. This is called block IO. non-formatted and very fast.

    2012-08-26 22:08:09 補充:

    補充一下:

    是一次全放入str 的變數中

    不是

    放入bytes的變數中

    bytes = 讀到的幾個byte的數量

    2012-08-26 22:11:26 補充:

    bytes = // <<<<--------the amount of data read

    fread(str, // <<<--------- put the data here

    sizeof(char), // <<<<-- size of the data "unit"

    MAX, // <<<<--- number of data "unit" to read

    fptr); // <<<<--- read from here

還有問題?馬上發問,尋求解答。