簡體   English   中英

從文本文件讀入數組

[英]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無法將其轉換為intint可以表示的最大值是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.

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