테스트 파일에서 숫자를 읽고 매트릭스에 표시하려고합니다. 텍스트 파일에는 한 줄에 하나의 번호가 있습니다. 첫 번째 두 줄은 행렬의 크기입니다. (3 및 4)이 숫자의 실제 데이터 값을 행렬에 할당하는 데 문제가 있습니다. 이 경우 값은 2에서 14 사이입니다.텍스트 파일의 C++ 입출력 번호
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
#include "Matrix.h"
int main()
{
CMatrix A(10,10); //set to arbitrary size
int x;
int i = 0;
int number;
int rowsFile;
int columnsFile;
while (myFile.good()&& myFile.is_open())
{
myFile>>x;
if (i==0){ //for row dimension
rowsFile = x;
}
if (i==1){ //for column dimension
columnsFile = x;
}
cout<<"Value "<<i<<": "<<x<<endl; //displays the values
if (i>=2){
for (int r = 0; r < rowsFile; r++)
{
for (int c = 0; c < columnsFile; c++)
{
A.Value(r,c) = x;
myFile>>x;
}
}
myFile.close();
}
i=i+1;
}
myFile.close();
CMatrix A(rowsFile, columnsFile);
cout<<endl<< "Rows: "<<A.getNumberOfRows()<<endl;
cout<< "Columns: "<<A.getNumberOfColumns()<<endl;
cout<<endl<<A.ToString();
}
다음은 출력 결과입니다.
어떤 이유로 든 내 주석 처리 된 루프가 작동하지 않는 것 같습니다. 도움이 될 것입니다. 고맙습니다!
여기에서하려는 일은 약간 혼란 스럽습니다. 먼저,'rowsFile'과'columnsFile' 값을 읽은 후에'i'를 증가시켜야합니다. 둘째, 입력을 하나의 루프로 처리하고 행렬을 다른 루프에 채우는 경우'x'의 값을 저장해야합니다. 또한, 당신의 제안 된'for' 루프의'i'는 여러분이 사용하고있는 다른'i'를 "어둡게"할 것이고, 이것은 혼란 스럽습니다. – NicholasM
입력이 성공하면 ** 시도해 보려면 ** fileeof()를 사용하지 마십시오 **! 작동하지 않습니다! 또한, ** 성공한 경우 ** 입력 후에 ** 항상 ** 확인 **합니다. 이 두 점에 비해, 그것은 한계점입니다 :'std :: stringstream'이 아닌 문자열에서 입력해야 할 때'std :: istringstream'을 사용하십시오. 스트림을 생성하고 파기하는 것은 다소 힘든 작업입니다. 즉, 빠르게 원격으로 라벨링 할 수있는 무언가에 도착하지 않을 것입니다. –
아래에서 귀하의 의견을 보았습니다. 앞으로 나아가 다. 그것은 당신이 CMatrix A _twice_를 선언 한 것처럼 보입니다 :'main'의 맨 위에 한 번,'Rows :'와'Columns'을 인쇄하기 바로 전에. 사실, 컴파일러가 동일한 범위에 있기 때문에 컴파일러가 그렇게 할 수있게 해주는 것이 놀랍습니다. 두 번째 선언을 제거해보십시오. 그래도 작동하지 않으면 가장 안쪽 루프에 print 문을 추가하십시오. – NicholasM