簡體   English   中英

在 C++ 中一次讀取一個文件

[英]Reading a file one int at a time in C++

我正在開發一個需要將文件中的整數讀入二維數組的程序。 這個概念很簡單,我通常對文件 I/O 沒意見。 我的問題是該文件包含 20 行,每行 18 個數字。 數字不以空格分隔。 一個例子是:

123456789987654321
192837465564738291

我必須將每個單獨的數字讀入二維數組。 我已經創建了一個 for 循環,但我沒有從循環的文件 I/O 部分獲得所需的 output。 有沒有辦法做到這一點,或者我是否需要使用變通方法,例如將行讀入字符串/數組並將其分開? 這讓我發瘋。 代碼中已經打開並測試了infile。 GRIDSIZE 的大小為 9,grid 是二維數組

int n;

for(int i=0; i<GRIDSIZE; i++)
      {   
    for(int j=0; j<GRIDSIZE; j++)
      {
        infile.get()>>grid[i][j];//This is causing the problem
         // infile >> n //Also tried this, not working
         // grid[i][j] = n;
        cout<<grid[i][j]<<endl;
      }
      }

在 ifstream 上調用 get()返回單個字符,轉換為 int。 所以嘗試改變

infile.get()>>grid[i][j];

grid[i][j] = infile.get();

這將為您提供該數字的 ASCII 值。 然后,您可以使用isdigit() (如 stefaanv 所述)來確保您確實有一個數字,然后只需從中減去 0x30(= 48 或“0”)即可獲得 integer 值(從ASCII 圖表中可以明顯看出,從 0x30 到 0x39 的數字 go)。 例如:

int n = infile.get();
if(isdigit(n)) {
  grid[i][j] = n - '0';
}

您可以使用infile.get()來獲取一個字符(如 sonicwave 的答案)並使用isdigit()檢查您是否真的有一個 integer 數字。

編輯(在 adohertyd 發表評論后):
如果 ASCII 字符是數字,您可以從中減去 ASCII 字符“0”以獲得實際數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM