存储数组后无法处理文件中的数据

时间:2014-01-28 18:00:17

标签: c++ arrays ifstream

我的文件包含带随机数的20x20矩阵。我已经阅读了文件中的数字,然后存储在数组中。似乎我实际上没有将数字分配给数组,因为当我打印出一个数字时,它显示的内容类似于“||”而不是数字,请参阅第cout <<array[0][1]行。我的完整代码如下:

#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
#define length 20

int main(){

    char array[length][length];

    char chs;


    ifstream  grid;
    grid.open("D:\\Example\\digit.txt", ios::in);
    while (!grid.eof()){
        for (int i = 0; i < 19; i++){
            for (int j = 0; j < 19; j++){
                    grid.get(chs);
                    if (!grid.eof()){
                        array[i][j] = chs;
                        cout << setw(1) << array[i][j];///It display the numbers on file, there is no problem here.*/
                    }
            }
        }
    }

cout <<array[0][2];//There is problem it can not display the number it display something different than numbers.
grid.close();
while (1);
}

consol的输出,文件上的数字看起来就像这样。 cout <<array[0][3]无法打印

Output of the consol, the numbers on the file exactly look like this 我已经改变了最后一部分

cout << endl;
    for (int i = 0; i < 19; i++){
        for (int j = 0; j < 19; j++){

                cout << array[i][j];
            }
        }
    cout << endl;
    grid.close();

输出与文件上的数字不同的最后一部分

enter image description here

1 个答案:

答案 0 :(得分:2)

您的内部循环仅针对当前值i运行,这意味着您不会在第一行中读取任何值,而在第二行中不会读取任何值等。

for (int i = 0; i < 19; i++){
    for (int j = 0; j < i; j++){
//                      ^ wrong

如果你想读取20x20矩阵,你的内循环和外循环都应该运行20次迭代。

for (int i = 0; i < 19; i++){
    for (int j = 0; j < 19; j++){
//                      ^^

另请注意,您可能需要添加一些代码来处理输入文件中的任何换行符。在每组20个数字之后,您将有一个(\n)或两个(\r\n)字符表示换行符。这些是文本文件的有效部分,但可能不需要存储在你的阵列中。