读取文件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'; } }
我使用以下方法将每个int放入一个数组中:读取文件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)){
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
)是未定义的行为。