Я хотел бы спросить вас о вводе данных.У меня есть текстовый файл в следующем формате:
7 2
XY
1 0
2 0.048922
3 0.0978829
4 0.146908
5 0.196019
6 0.245239
7 0.294584
Первая строка содержит количество строк и столбцов для чтения. Вторая строка - заголовки.Начиная с третьей строки, это только данные.Я хотел бы прочитать мои данные в 2D-массив (mat [] []), а заголовки - в массив строк (title []), на которые можно было бы легко сослаться позже.Я зашел так далеко, написав сценарий.Он может считывать номера массивов в массив, но не двумерные.Я пытался объявить указатель на матрицу, которая передается функции, но я не смог этого сделать.Я также пробовал getline (), но я не знаю, как разделить заголовки \ t, разделенные на отдельные строки.
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
void readFile(char[]);
int main(){
char fileName[] = "results.txt";
readFile(fileName);
return 0;
}
// Read file to matrix
void readFile(char fileName[]){
int m, n;
// Create streamobject
ifstream infile;
infile.open(fileName);
// Exit if file opening failed
if (!infile.is_open()){
cerr<<"Opening failed"<<endl;
exit(1);
}
// Get size of the matrix
infile >> m >> n;
// Pre-allocate memory
string title;
float *mat=new float[m*n];
// Read title
// Start reading data
while (!infile.eof()){
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
infile >> mat[i*n+j];
}
}
}
infile.close();
}
Может ли кто-нибудь мне помочь?
Спасибо запомощь до сих пор.Я посмотрю на применение векторов в эти выходные, но я должен прочитать об этом.Я быстро изменил свой скрипт, так что теперь он делает то, что хотел: возвращает указатель на массив «mat» со значениями.У меня есть функция под названием «showMatrix», которая выводит ее на экран.Если я вызываю showMatrix в функции 'readFile', она работает нормально.С другой стороны, если я вызываю его вне основного сценария, он возвращает совершенно неправильные значения.
У меня такое ощущение, что здесь что-то не так.Не могли бы вы помочь, чтобы указать на это?
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
void readFile(char[],float *mat,int &m,int &n);
void showMatrix(float *mat,int m,int n);
/*******************************************************************
Script
*******************************************************************/
int main(){
char fileName[] = "results.txt";
int m, n;
float *mat;
// Read data from file
readFile(fileName,mat,m,n);
showMatrix(mat,m,n);
return 0;
}
// Read file to matrix
void readFile(char fileName[],float *mat,int &m,int &n){
// Create streamobject
ifstream infile;
infile.open(fileName);
// Exit if file opening failed
if (!infile.is_open()){
cerr<<"Opening failed"<<endl;
exit(1);
}
// Get size of the matrix
infile >> m >> n;
// Pre-allocate memory
mat=new float[m*n];
// Read title
std::string X;
std::string Y;
infile >> X >> Y;
// Reading data
while (!infile.eof()){
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
infile >> mat[i*n+j];
}
}
}
// showMatrix(mat,m,n);
infile.close();
}
// Print matrix to screen
void showMatrix(float *x,int m, int n){
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
cout << x[i*n+j] << "\t";
}
cout << endl;
}
}