我需要我的程序从txt读取一个数组。它很显然,但是当我注意到数字时,我发现只有一半的数组是正确的,其余的是随机的。 此外,如果我读取2个不同的数组,则随机数是相同的。
有代码:
//List of Biblio.
#include <cstdlib>
#include<stdio.h>
#include <time.h>
#include <iostream>
#include <vector>
using namespace std;
FILE *fp;
//Functiotns declaration.
//
void dimensions(int &,int &,int &);
//
void rTime (int** ,int,int,int &); // The first int, it's an Array!
//
void rTimeprint (int** ,int,int,int);
//
void spt (int**,vector<int> & ,int,int); // The first int it's an Array!
//
int block (int, int,int, int,int,int);
//
int neh (int,int,int,int,int,int,int);
//
static int swap (int, int,int,int,int,int,int,int,double,double,float);
//
//A inserta, hi ha una matriu (1st int) i vector (3rd int)
static int inserta (int,int,int,int,int,int,int,int, double,double,float );
//
static int sa (double,double,float);
//Array varaibles;
int column, row, nombreProblemes;
int main() {
// Open the file where's the array;
fp = fopen("entrada.txt", "r");
dimensions(column, row, nombreProblemes);
// Create the Array:
int *matriuTemps[column];
for (int i= 0; i<column;i++){
matriuTemps[i] = new int [row];
}//end of loop Array[][] creator
// Function read time (array)
rTime(matriuTemps, column, row,problema);
//Function print the Array
rTimePrint(matriuTemps, column,row,problema);
}//End of main
还有函数rTime:
void rTime(int *matriuTemps [],int column, int row, int &Problema){
fscanf(fp, "%d",&Problema);
for (int i= 0; i<row; i++){//Outter loop (row)
for (int j=0; j<column;j++){//inner loop (column))
matriuTemps[i][j]=0;
fscanf(fp,"%d",&matriuTemps [i][j]);
}//inner loop
}//outer loop
如果它是你的更多信息,我把打印数组的函数:
void rTimeprint (int *matriuTemps[20] ,int column,int row,int problema){
cout<<"\nAquest és la matriu de temps del problema: "<< problema <<endl<<endl;
for (int i= 0; i<row; i++){//Outter loop (row)
for (int j=0; j<column;j++){//inner loop (column))
cout<< matriuTemps[i][j]<<"\t";
}//inner loop
cout << endl;
}//outer loop
}
最后输出:(我用x x标记,这里的列值开始是随机的,从那里到右边都是随机的) 第一个数组
x
x
54 83 15 71 77 36 53 38 27 87 76 91 14 29 12 77 32 87 68 94
79 3 11 99 56 70 99 60 16 89 49 15 89 45 60 23 66 58 31 68
16 89 49 15 89 45 60 23 66 58 31 68 78 91 13 59 58 56 20 85
66 58 31 68 78 91 13 59 58 56 20 85 53 35 53 41 69 13 86 72
58 56 20 85 53 35 53 41 69 13 86 72 8 49 47 87 58 18 68 28
第二阵列:
x
x
0 0 0 0 0 0 0 0 0 87 76 91 14 29 12 77 32 87 68 94
45 33 11 99 56 0 87 60 16 89 49 15 89 45 60 23 66 58 31 68
12 89 40 15 89 45 60 23 66 58 31 68 78 91 13 59 58 56 20 85
46 57 1 68 78 95 78 53 58 56 20 85 53 35 53 41 15 13 86 72
52 56 20 95 3 15 78 42 15 13 86 72 8 49 47 87 58 18 68 28
答案 0 :(得分:1)
您似乎已将row
和column
尺寸混淆了 - 这部分:
int *matriuTemps[column];
for (int i= 0; i<column;i++){
matriuTemps[i] = new int [row];
}
应该是:
int *matriuTemps[row]; // allocate `row` rows
for (int i= 0; i<row;i++){ // for each row
matriuTemps[i] = new int [column];
} // allocate `column` elements
答案 1 :(得分:1)
在main
函数you declare
matriuTemps to be an array of
列elements, each element being a pointer to
int`。
但在例如rTime
您将数组视为 row
元素的数组,每个元素都是column
整数数组。所以你混淆了索引,除非row
和column
都相等,否则你会遇到问题。
另请注意,C ++实际上并没有variable-length arrays,因此您对matriuTemps
的定义不适合C ++。
相反,如果您想要动态数组,则应使用std::vector
。也许像是
std::vector<std::vector<int>> matriuTemps(column, std::vector<int>(row));
上面的行将matriuTemps
定义为一个或多个整数向量,并设置两个“维度”的大小。