欧美女同视频激情_国产原创中文字幕在线观看_4438xx亚洲最大五色丁香_成年做羞羞的视频网站在线观看_a毛片免费全部播_原神胡桃乳液vx网站进入_一区亚洲欧美中文日韩v在线观看_校园春色亚洲_搞机time软件app免费下载安装_十八禁无遮拦视频大全

北太天元和MATLAB對文件末尾判斷的區(qū)別

標簽: 問題反饋——功能問題

邱彼鄭楠 2025-02-20 09:47:43

首先生成一個測試文件,第一行類似于表頭,2到4行每行存儲3個數(shù),用tab鍵分隔

fwid = fopen("test.txt", "w");
fprintf(fwid, "%s\t%s\t%s\n", "column_1", "column_1", "column_3");
fprintf(fwid, "%d\t%d\t%d\n", 1, 2, 3);
fprintf(fwid, "%d\t%d\t%d\n", 4, 5, 6);
fprintf(fwid, "%d\t%d\t%d\n", 7, 8, 9);
fclose(fwid);

得到的文件共5行,第5行是一空行。下面以 fgetl 函數(shù)逐行讀取該文件。

方法一:

以 feof 函數(shù)作為 while 循環(huán)的判斷條件,依次讀取文件的每一行并顯示出來

frid = fopen("test.txt", "r");
fgetl(frid);
% 是否到達文件末尾 (EOF)
while ~feof(frid)
    line = fgetl(frid);
    disp(line);
end
fclose(frid);

該方法在北太天元中除了顯示文件中的3行數(shù)字,還會顯示一個-1,這個-1是fgetl判斷到文件末尾后返回的。而在 MATLAB 中只顯示 3 行數(shù)字。

屏幕截圖 2025-02-20 091637.png屏幕截圖 2025-02-20 091816.png

方法二:

考慮到方法一中 fgetl 函數(shù)返回了 -1 但 feof 條件沒有起作用,將 while 循環(huán)條件改為 true,循環(huán)內(nèi)部滿足 feof 條件 break 循環(huán)。

frid = fopen("test.txt", "r");
fgetl(frid);
while true
    line = fgetl(frid);
    % 如果到達文件末尾,則退出循環(huán)
    if feof(frid)
        break;
    end
    disp(line);
end
fclose(frid);

該方法在北太天元中輸出符合預期,但在 MATLAB 中只輸出兩行數(shù)據(jù)

屏幕截圖 2025-02-20 092237.png屏幕截圖 2025-02-20 092913.png

也就是說,在北太天元中,讀取了 7 8 9 三個數(shù)后,需要再讀取一行才到末尾 (EOF),所以讀取到的 -1 沒有 disp;而在 MATLAB 中,讀取了之后已經(jīng)到末尾,雖然讀取了這三個數(shù),就跳出循環(huán)不再顯示。代碼中的 if 判斷更換任意位置在北太天元中都將顯示 -1。

驗證:

手動逐行讀取文件進行驗證

frid = fopen("test.txt", "r");
fgetl(frid);
disp(feof(frid));
fgetl(frid);
disp(feof(frid));
fgetl(frid);
disp(feof(frid));
fgetl(frid);
disp(feof(frid));
fgetl(frid);
disp(feof(frid));
fclose(frid);

在北太天元和 MATLAB 中輸出的結果分別是

屏幕截圖 2025-02-20 094137.png屏幕截圖 2025-02-20 094435.png

測試文件共 5 行,前四行有內(nèi)容,第五行是空行,在 MATLAB 中,讀取完第四行就判斷為文件末尾,而在北太天元中,五行全部讀完才判斷是文件末尾。

2007 1 0 收藏 回復

回復

贊,回頭我們內(nèi)部討論下看是否可以保持一致

回復

重置 提交