我的程序只读取了半个数组c ++

时间:2015-07-09 08:49:08

标签: c++ arrays file

我需要我的程序从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  

2 个答案:

答案 0 :(得分:1)

您似乎已将rowcolumn尺寸混淆了 - 这部分:

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 ofelements, each element being a pointer to int`。

但在例如rTime您将数组视为 row 元素的数组,每个元素都是column整数数组。所以你混淆了索引,除非rowcolumn都相等,否则你会遇到问题。

另请注意,C ++实际上并没有variable-length arrays,因此您对matriuTemps的定义不适合C ++。

相反,如果您想要动态数组,则应使用std::vector。也许像是

std::vector<std::vector<int>> matriuTemps(column, std::vector<int>(row));

上面的行将matriuTemps定义为一个或多个整数向量,并设置两个“维度”的大小。