从文本文件中读取不起作用

时间:2014-12-22 10:31:48

标签: c++

我有问题。当我使用以下文本文件运行此代码时:

car
3
4
-8 7
-+--
-7 1

我尝试打印它,打印到7号,最后2个字符没有打印

有人能帮帮我吗? 感谢

    string srow;
    string scolumn;
    int row = 0;
    int column = 0;
    string gametype;
    ifstream myReadFile;
    myReadFile.open("text.txt");

    if (myReadFile.is_open())
    {
        getline(myReadFile, gametype);
        getline(myReadFile, srow);
        getline(myReadFile, scolumn);

        row = stoi(srow);
        column = stoi(scolumn);

        for (i = 0; i <row; i++)
        {
            for (j = 0; j <column; j++)
            {
                myReadFile.get(ch);
                printf("%c",ch);
            }
        }
    }
    myReadFile.close();
    return 0;
}

2 个答案:

答案 0 :(得分:0)

如果ch是char ...你正在跳过行尾。你的文件确实是:

car<\n>
3<\n>
4<\n>
-8 7<\n>
-+--<\n>
-7 1<\n>

&LT; \ n&GT;是行尾字符,所以..如果你读4个字符×2行(8个字符)..你正在阅读:

12345678
-+--E-7
    ^
    |
     ----- End of line (</n)

您可以使用getline来避免行尾或在句子中读取它,但要小心,Windows / DOS(\ r \ n)和Unix(\ n)不具有相同的{{3} }为行尾。

答案 1 :(得分:0)

输出错误,因为每行5字符不是4。你没有考虑行尾的\n。最后两个字符未打印,因为从两行以上打印了两个\n。要做的更改是:

Replace 
for (j = 0; j <column; j++)
with
for (j = 0; j <= column; j++)