[英]Reading from text file into an array
我正在嘗試將用Vim編輯的文本文件讀入數組。
文本文件為30 * 50,由一位數字組成。 我一直在瘋狂嘗試使其工作,但是我認為由於換行符而引起的問題。 這是我一直在使用的:
Map::Map(char* filename)
{
grid[30][50] = (0);
string line;
ifstream m_file(filename);
if (m_file.is_open())
{
while(m_file.good())
{
for (int i = 0; i < 30; i++)
{
getline(m_file,line);
for (int k = 0; k < 50; k++)
{
int tnum = atoi(line.c_str());
grid[i][k] = tnum;
}
}
}
m_file.close();
}
};
grid在頭文件中定義為int grid [30] [50]。
我用於打印的代碼如下:
void display_room(int trid[30][50])
{
for (int i = 0; i < 30; i++)
{
for (int k = 0; k < 50; k++)
{
mvprintw(i,k,"%d",trid[i][k]);
};
};
};
在調用Map sMap = Map(“ testmap”);之后;
我只是試圖將單個數字捕獲到一個數組中,然后(使用curses)重新打印該數組。 當前,無論測試圖文件中有什么內容,它都會讀取測試圖文件並打印全零。
如果我了解您的問題:您的解析會從整行開始設置值,而整行應該只包含一位數字...
int tnum = atoi(line.c_str());
grid[i][k] = tnum;
可以通過以下方式將數字(ASCII轉換為int / byte / ...):
grid[i][k] = line[k] - '0';
(也許需要一些強制轉換。)
在內部循環中,您每次都使用該行的全部內容調用atoi
。 由於該行的長度為50個字符, atoi
無法將其轉換為int
( int
可以表示的最大值是2147483647,並且您的數字可能大於該數字)。 當atoi
失敗時,它返回0
。
您需要將行的每個字符轉換為一個int
。 像這樣:
for (int i = 0; i < 30; i++)
{
getline(m_file,line);
for (int k = 0; k < 50; k++)
{
// The ASCII character of the digits 0 to 9 have
// successives values.
int tnum = line[k] - '0';
grid[i][k] = tnum;
}
}
再次查看您的代碼。 嘗試查看實際所說的內容,而不是您希望的內容
int tnum = atoi(line.c_str());
您明確希望該行依次讀取該行上的五十個數字。 但這並沒有說明。 它試圖將整行變成整數(並嘗試執行五十次)。
由於您的數字是個位數,因此您實際上需要簡單得多的東西
int tnum = line[k] - '0';
通過說line [k],您將在每次循環中得到一個不同的數字(因為k每次循環都增加)。 - '0'
位只是將字符轉換為整數的一個技巧。 看看您是否可以知道它是如何工作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.