读取文件1';s和0';一次一个 在C++中,我试图从下面的文件中读取数组: 0000000000 0000000000 0000000000 0001110000 0001010000 0001110000 0000000000 0000000000 0000000000 0000000000 X = (int* )malloc(n*n*sizeof(int)); for (int i = 0; i<(n*n); i++){ j = read.get(); if (isdigit(j)){ *(X+i) = j - '0'; } }

读取文件1';s和0';一次一个 在C++中,我试图从下面的文件中读取数组: 0000000000 0000000000 0000000000 0001110000 0001010000 0001110000 0000000000 0000000000 0000000000 0000000000 X = (int* )malloc(n*n*sizeof(int)); for (int i = 0; i<(n*n); i++){ j = read.get(); if (isdigit(j)){ *(X+i) = j - '0'; } },c++,file,C++,File,我使用以下方法将每个int放入一个数组中: 0000000000 0000000000 0000000000 0001110000 0001010000 0001110000 0000000000 0000000000 0000000000 0000000000 X = (int* )malloc(n*n*sizeof(int)); for (int i = 0; i<(n*n); i++){ j = read.get(); if (isdigit(j)){

我使用以下方法将每个int放入一个数组中:

0000000000
0000000000
0000000000
0001110000
0001010000
0001110000
0000000000
0000000000
0000000000
0000000000
  X = (int* )malloc(n*n*sizeof(int));
  for (int i = 0; i<(n*n); i++){
    j = read.get();
    if (isdigit(j)){
        *(X+i) = j - '0';
    }
  }
我不认为我输出数组的方式有任何问题:

for (int i = 0; i<(n*n); i++){
      write << *(X+i);
      if (((1+i) % n) == 0){
        write << endl;
      }
}

for(int i=0;i问题是,即使
是数字(j),也在增加
i
为false。因此,您将与文件中的换行符相对应的数组元素保留为未初始化,并且由于正在计算换行符,因此也没有读取所有数字。如果
,则需要将增量放入

for (int i = 0; i < n*n; ) {
    char j = read.get();
    if (isdigit(j)) {
        X[i++] = j - '0';
    }
}
for(int i=0;i

顺便说一句,如果您使用指针作为数组,请使用数组语法
X[index]
,而不是
*(X+index)
。这会使意图更清楚。

问题是,即使
是数字(j),您也在增加
i
为false。因此,您将与文件中的换行符相对应的数组元素保留为未初始化,并且由于正在计算换行符,因此也没有读取所有数字。如果
,则需要将增量放入

for (int i = 0; i < n*n; ) {
    char j = read.get();
    if (isdigit(j)) {
        X[i++] = j - '0';
    }
}
for(int i=0;i

BTW,如果使用指针为数组,则使用数组语法<代码> x[index ] >代码>而不是<代码>(x+index)。它使意图更清晰。

C++中不使用<代码> MalCube()/<代码>,使用<代码>新< /代码>。更好地,使用<代码> STD::向量< /代码>代替C样式数组。不建议使用<代码> MARROCK()
C++
中。您通常应该使用
new
或(更好)像
std::vector
std::array
这样的容器。问题在于处理(或不处理)时的读取循环中非数字。缓冲区中对应的
int
未初始化,但写入代码假定存储了某些内容。结果(在写入循环中访问未初始化的
int
)是未定义的行为。不要使用
malloc()在C++中,使用<代码>新< /代码>。使用<代码> STD::向量< /> >代替C样式数组。不建议在 C++ >代码> >使用<代码>新< /代码>或(更好)容器如 STD::vector < /COD>或<代码> STD::数组< /代码>。问题在您的读循环中,处理中。(或不处理)非数字。缓冲区中相应的
int
未初始化,但写入代码假定存储了某些内容。结果(访问写入循环中未初始化的
int
)是未定义的行为。