首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC 中 fscanf 讀取不定量變量:循環讀取至 EOF,數組按索引取址

     編輯:程式設計疑難解答

問題

MFC 如何用 `fscanf` 讀取不定數量的變量?用數組接收如何取地址?

核心方法

用循環配合 `fscanf` 返回值判斷 EOF,逐個讀入數組元素。

代碼範例

FILE* fp = fopen("data.txt", "r");
if (!fp) return;

float vals[1000]; // 足夠大的緩衝區
int count = 0;
float temp;
while (fscanf(fp, "%f", &temp) == 1) { // 成功讀取 1 個 float
    if (count < 1000) vals[count++] = temp;
    else break; // 防溢出
}
fclose(fp);

// 現在 count 為實際讀取數量,vals[0..count-1] 存有數據

關鍵點

  • `fscanf(fp, "%f", &temp)` 返回**成功匹配賦值的項數**;讀到 EOF 返回 `EOF`(-1);格式不匹配返回 0 且不消費輸入(需額外處理)。
  • 數組取址:`&vals[i]` 或 `vals + i` 均可,循環中用臨時變量 `temp` 再賦值更清晰。
  • 若文件每行固定欄位,可用 `fscanf(fp, "%f %d %s", &f, &i, str)` 一次讀多欄。

MFC 專用替代

MFC 提供 `CStdioFile` 配合 `ReadString` 逐行讀取,再用 `sscanf`/`CString::Tokenize` 解析,更符合 MFC 風格且支援 Unicode:

CStdioFile file;
if (file.Open(_T("data.txt"), CFile::modeRead | CFile::typeText)) {
    CString line;
    while (file.ReadString(line)) {
        // 解析 line...
    }
    file.Close();
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved