어떤 이유로 아래 코드는 내 double 배열에 0s를 저장하고 파일을 만들려고 시도하지 않으므로 0을 쓰지 않습니다. 이것은 C++로 프로그래밍 한 첫 번째 시간이므로 기본적인 것들에 익숙해졌습니다. 어떤 도움을 주셔서 감사합니다. 아래 무엇으로 업데이트 getMatrix 기능과 지금은 만들 수 없습니다 여전히 잘못된 출력 값을 받고 있어요 :파일에서 두 개의 행을 읽는 데 문제가 있습니다. C++
#include <iostream>
#include <fstream>
#include <random>
using namespace std;
double* getMatrix(int m, int n, char const* fileName) {
ifstream inFile(fileName);
if(!inFile.is_open()) {
throw std::runtime_error("failed to open file");
}
double* newMatrix = new double[m*n];
for (int i = 0; i < m * n; ++i) {
inFile >> newMatrix[i];
}
inFile.close();
return newMatrix;
}
void writeMatrix(int n, int m, double* matrix, char const* fileName) {
ofstream out(fileName);
for(int i=0; i < m*n && out; ++i) {
out << matrix[i] << "\n";
}
return;
}
int main(int argc, char *argv[]) {
double* newMatrix = getMatrix(3, 4, "matrixA.txt");
for(int i = 0; i < 12; ++i) {
cout << newMatrix[i] << endl;
}
writeMatrix(3, 4, newMatrix, "matrixC.txt");
delete newMatrix;
}
여기에 내가
0.314723686393179
0.405791937075619
-0.373013183706494
0.413375856139019
0.132359246225410
-0.402459595000590
-0.221501781132952
0.046881519204984
0.457506835434298
0.464888535199277
-0.342386918322452
0.470592781760616
편집 읽을려고 파일입니다 파일 여기에 "matrixC.txt"
double* getMatrix(int m, int n, char* const fileName) {
ifstream inFile(fileName);
double* newMatrix = new double[m*n];
try {
for (int i = 0; i < m * n; ++i) {
inFile >> newMatrix[i];
}
} catch (ifstream::failure e) {
cout << "exception opening file";
}
inFile.close();
return newMatrix;
}
와 내가 출력으로 얻고 무엇
-1.28823e-231
-1.28823e-231
6.95324e-310
6.95327e-310
6.95324e-310
6.95327e-310
0
0
0
0
0
0
edit2 : 주 코드 블록이 파일이 열려 있지 않은 경우 처리하는 최신 코드로 업데이트되었습니다. 아직하지 않습니다
EDIT3 : 내가 문제를 해결
가, 난 그냥 컴파일하고 실행하려고
코드를 최소한의 예제로 줄이려면 입력을 stringstream으로 바꾸십시오. 앞으로도'std :: vector' 사용을 고려해보십시오. 마지막으로, 입력 파일을 열 수 없다는 사실을 실제로 처리하지는 않습니다. 그게 잘못이라고 생각합니다. 그냥'던질 std :: runtime_error ("파일을 열지 못했습니다");'일어나는 경우. BTW : 반환하기 전에 스트림을 닫는 불필요한 및 함수의 다른 종료 경로에 어쨌든 생략. –
좋은 스타일이라고해도 벡터를 사용할 수 없습니다. 또한, 나는 C++ 예외 처리를 알지 못하기 때문에 throw 문을 어디에 두어야하는지 이해하지 못합니다. 네가 숟가락으로 만들어서 미안하다. – vicg
관련 없음 : 또한 파일 이름 매개 변수 유형이 잘못되었습니다. 'char * const'와 가지고 있어야하는 것,'char const *'(또는'const char *') 사이에는 근본적인 차이점이 있습니다. 전자는 변경 불가능한 데이터에 대한 포인터입니다. 후자는 변경 불가능한 데이터에 대한 가변 포인터입니다. 컴파일러에서 경고해야합니다. 그렇지 않은 경우 경고 수준을 높입니다. – WhozCraig