C++ 显示不需要的字符的二维数组

C++ 显示不需要的字符的二维数组,c++,arrays,C++,Arrays,我在显示2d数组的内容时遇到问题,我在这里搜索了解决方案,但由于我不完全确定我的问题是什么,我不确定我问的问题是否正确 我正在编写一个程序,允许用户打开一个.txt文件,该文件将始终包含30×30个字符,所有字符都用逗号分隔,第一行和第二行将是0,1,2,3,9,0,1,2,3,9,每行的末尾将是一个新行。该程序应在屏幕上显示.txt文件的内容,不使用逗号,然后允许用户搜索文件中字符的位置 我认为最好的方法是使用带有分隔符的getline函数来填充2d数组,这似乎很有效,但当我显示数组的内容时除

我在显示2d数组的内容时遇到问题,我在这里搜索了解决方案,但由于我不完全确定我的问题是什么,我不确定我问的问题是否正确

我正在编写一个程序,允许用户打开一个.txt文件,该文件将始终包含30×30个字符,所有字符都用逗号分隔,第一行和第二行将是0,1,2,3,9,0,1,2,3,9,每行的末尾将是一个新行。该程序应在屏幕上显示.txt文件的内容,不使用逗号,然后允许用户搜索文件中字符的位置

我认为最好的方法是使用带有分隔符的getline函数来填充2d数组,这似乎很有效,但当我显示数组的内容时除外,最后一个字符是重复的,我不确定这是由于填充数组的方式还是显示数组的方式所致

while(!inputFile.eof())
{
   for (int i = 0; i < SIZE; ++i)           // SIZE is defined 30
     {
       for (int j = 0; j < SIZE; ++j)
         {
           getline(inputFile, line,',');    
           aArray[i][j] = line;             // aArray and line are declared as strings     
           std::cout << aArray[i][j];
         }
     }
           cout << endl;
}
这是我的输出:

012345678901234567890123456789 
1*!80;*ab080.yZc448888yyy4–68! 
200000000001112200055JJJJJJJJj 
398708080Ac44*FF6FKJHG5sHUP220 
400000000000000000000000000000 
588888888888888888888888888888 
6PPPPPPPPPPPPPPPPPPPYYY0000000 
700000000000000000000000000000 
888888888888888888888888888888 
9PPPPPPPPPPPPPPPPPPPYYY0000000 
001122DD55$£!aAaAaAaAaAaAaAaA8 
100000000000000000000000000000 
288888888888888888888888888888 
3PPPPPPPPPPPPPPPPPPPYYY0000000 
401122DD55$£!aAaAaAaAaAaAaAaA8 
500000000000000000000000000000 
608088888888888888888888888888 
7P0PPPPPPPPPPPPPPPPPYYY0000000 
801122DD55$£!aAaAaAaAaAaAaAaA8 
900000000000000000000000000000 
088888888888888888888888888888 
1PPPPPPPPPPPPPPPPPPPYYY0000000 
201122DD55$£!aAaAaAaAaAaAaAaA8 
301122DD55$£!aAaAaAaAaAaAaAaA8 
400000000000000000000000000000 
588888888888888888888888888888 
6PPPPPPPPPPPPPPPPPPPYYY0000000 
701122DD55$£!aAaAaAaAaAaAaAa08 
8PPPPPPPPPPPPPPPPPPPYYY0000080 
901122DD55$£!aAaAaAaAaAaAaAa0888888888888888888888888888888

正如你所看到的,最后一个字符是重复的,这不是我想要的。我对C++是新的,所以我不确定我是否使用了最好的方法,我花了将近2天的时间来解决我错误地把cOut错误地扩展到注释上的问题,@ WHOZCRAIGG,你不应该在循环条件下使用<代码> IoSoo::EOF因为只有在读取文件结尾后才会返回true。相反,这样做就足够了(注意,有很多方法可以做到这一点):


请发布输入文件的内容。还请减小输入文件的大小,并发布程序的输出。你可以用你的问题来做那件事。这将帮助人们回答您的问题。我已经包含了输入文件的内容,并通过删除空格减小了输出文件的大小。看来@WhozCraig为我提供了一些很好的指导。@WhozCraig非常感谢你为我指明了正确的方向,我所要做的就是摆脱这个错误=EOF和重新排列的线路,我已经和它完美地工作。也发布我的解决方案合适吗?
012345678901234567890123456789 
1*!80;*ab080.yZc448888yyy4–68! 
200000000001112200055JJJJJJJJj 
398708080Ac44*FF6FKJHG5sHUP220 
400000000000000000000000000000 
588888888888888888888888888888 
6PPPPPPPPPPPPPPPPPPPYYY0000000 
700000000000000000000000000000 
888888888888888888888888888888 
9PPPPPPPPPPPPPPPPPPPYYY0000000 
001122DD55$£!aAaAaAaAaAaAaAaA8 
100000000000000000000000000000 
288888888888888888888888888888 
3PPPPPPPPPPPPPPPPPPPYYY0000000 
401122DD55$£!aAaAaAaAaAaAaAaA8 
500000000000000000000000000000 
608088888888888888888888888888 
7P0PPPPPPPPPPPPPPPPPYYY0000000 
801122DD55$£!aAaAaAaAaAaAaAaA8 
900000000000000000000000000000 
088888888888888888888888888888 
1PPPPPPPPPPPPPPPPPPPYYY0000000 
201122DD55$£!aAaAaAaAaAaAaAaA8 
301122DD55$£!aAaAaAaAaAaAaAaA8 
400000000000000000000000000000 
588888888888888888888888888888 
6PPPPPPPPPPPPPPPPPPPYYY0000000 
701122DD55$£!aAaAaAaAaAaAaAa08 
8PPPPPPPPPPPPPPPPPPPYYY0000080 
901122DD55$£!aAaAaAaAaAaAaAa0888888888888888888888888888888
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

#define SIZE 30

int main() {

    std::string line;
    std::string aArray[SIZE][SIZE];
    std::ifstream inputFile("file2.txt");

    for (int i = 0; getline(inputFile, line) && i < SIZE; ++i) {

        std::istringstream lineStream(line);
        std::string token;

        for (int j = 0; getline(lineStream, token, ',') && j < SIZE; ++j) {
            aArray[i][j] = token;
            std::cout << aArray[i][j];
        }

        std::cout << std::endl;
    }
}
012345678901234567890123456789
1*!80;*ab080.yZc448888yyy4–68!
200000000001112200055JJJJJJJJj
398708080Ac44*FF6FKJHG5sHUP220
400000000000000000000000000000
588888888888888888888888888888
6PPPPPPPPPPPPPPPPPPPYYY0000000
700000000000000000000000000000
888888888888888888888888888888
9PPPPPPPPPPPPPPPPPPPYYY0000000
001122DD55$£!aAaAaAaAaAaAaAaA8
100000000000000000000000000000
288888888888888888888888888888
3PPPPPPPPPPPPPPPPPPPYYY0000000
401122DD55$£!aAaAaAaAaAaAaAaA8
500000000000000000000000000000
608088888888888888888888888888
7P0PPPPPPPPPPPPPPPPPYYY0000000
801122DD55$£!aAaAaAaAaAaAaAaA8
900000000000000000000000000000
088888888888888888888888888888
1PPPPPPPPPPPPPPPPPPPYYY0000000
201122DD55$£!aAaAaAaAaAaAaAaA8
301122DD55$£!aAaAaAaAaAaAaAaA8
400000000000000000000000000000
588888888888888888888888888888
6PPPPPPPPPPPPPPPPPPPYYY0000000
701122DD55$£!aAaAaAaAaAaAaAa08
8PPPPPPPPPPPPPPPPPPPYYY0000080
901122DD55$£!aAaAaAaAaAaAaAa08