[英]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.