Timelord Posted October 14, 2015 Report Posted October 14, 2015 Se da o matrice de caractere pe mai multe linii(liniile si coloanele au mereu aceeasi lungime).Am aflat numaraul de linii,coloane,iar cand am incercat sa le introduc intr-o matrice si sa le afisez imi arata toate linii,mai putin ultima din care imi afiseaza aproximativ jumatate.Sugestii legate de aceasta problema?#include <iostream>#include <fstream>#include <cstring>using namespace std;ifstream TestIn("test");int main(){ char Grid[1000][1000],s[1000]; int LungimeX,LungimeY,i,j; TestIn.getline(s,1000); //aflam lungimea randurilor/numarul coloanelor/lungimea X LungimeX=strlen(s); cout<<LungimeX<<endl;//aflam lungimea colonelor/numarul randurilor/lungimea Y while (!TestIn.eof()) { TestIn.getline(s,1000); LungimeY++;}cout<<LungimeY;//resetam flagul .eof pentru reciti fisierulTestIn.clear();TestIn.seekg (0, TestIn.beg);//introducem gridul intr-o matricefor(i=1;i<=LungimeY;i++){for(j=1;j<=LungimeX;j++){ TestIn.get(Grid[i][j]);}}for(i=1;i<=LungimeY;i++){for(j=1;j<=LungimeX;j++){ cout<<Grid[i][j];}} return 0;} Quote
dekeeu Posted October 14, 2015 Report Posted October 14, 2015 (edited) Variabila LungimeY nu este setata corect.Numerotarea liniilor se face de la 0 , deci daca matricea ta va avea 3 randuri, variabila LungimeY va avea valoarea 2.Modifica cele 2 for-uri astfel incat sa incluzi toate liniile: for(i=0;i<=LungimeY;i++) { for(j=0;j<=LungimeX;j++) { TestIn.get(Grid[j]); } } for(i=0;i<=LungimeY;i++) { for(j=0;j<=LungimeX;j++) { cout<<Grid[j]; } } Edited October 14, 2015 by dekeeu Quote
Byte-ul Posted October 14, 2015 Report Posted October 14, 2015 (edited) In primul rand seteaza LungimeY sa porneasca de la 1 sau pune TestIn.seekg (0, TestIn.beg); dupa ce gasesti numarul coloanelor.In al doilea rand, tie o sa-ti ia si caracterele \n cand folosestiTestIn.get(). Trebuie sa le ignori pe alea.Deci codul o sa arate ceva de genu:#include <iostream>#include <fstream>#include <cstring>using namespace std;ifstream TestIn("test");int main(){ char Grid[1000][1000],s[1000]; int LungimeX,LungimeY,i,j; TestIn.getline(s,1000); TestIn.seekg (0, TestIn.beg); //aflam lungimea randurilor/numarul coloanelor/lungimea X LungimeX=strlen(s); cout<<LungimeX<<endl;//aflam lungimea colonelor/numarul randurilor/lungimea Y while (!TestIn.eof()) { TestIn.getline(s,1000); LungimeY++;}cout<<LungimeY;//resetam flagul .eof pentru reciti fisierulTestIn.clear();TestIn.seekg (0, TestIn.beg);//introducem gridul intr-o matricefor(i=1;i<=LungimeY;i++){for(j=1;j<=LungimeX;j++){ TestIn.get(Grid[j]); if ((int)Grid[j] == 10) TestIn.get(Grid[j]);}}for(i=1;i<=LungimeY;i++){for(j=1;j<=LungimeX;j++){ cout<<Grid[j];}} return 0;} Edited October 14, 2015 by Byte-ul Quote
Timelord Posted October 17, 2015 Author Report Posted October 17, 2015 Multam mult pentru ajutor ^___^ Quote