[C++]Wczytanie liczb z pliku do tablicy

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
mazix2
Sędziwy Jeż
Sędziwy Jeż
Posty: 75
Rejestracja: 11 gru 2009, 10:01
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

[C++]Wczytanie liczb z pliku do tablicy

Post autor: mazix2 »

Mam pewien problem - chce wczytac liczby z pliku do tablicy. Plik ma np. taka postac:

Kod: Zaznacz cały

2
12 12 12 12
12 12 12 12
12 12 12 12
12 12 12 12
pierwsza liczba to n, posluzy do utworzenia tablicy dwuwym. n^2xn^2 - musze ja wpisac do zmiennej, aby utworzyc tablice. Kojelne liczby to te, ktore maja sie znalezc w tej tablicy (dokladnie tak, jak sa napisane.) Gdyby nie bylo na poczatku pliku tego rozmiaru, napisalbym cos takiego: (np dla tablicy 4x4, czyli tu n=2)

Kod: Zaznacz cały

#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;

int main(int argc, char *argv[]){
    ifstream dane_we;
    string calosc="",znak;
    string tab[4][4];
    int i=0,j=0;
    int licz=0;
    dane_we.open(argv[1],ios::in);
    while(dane_we.good()){
          znak=dane_we.get();
          if(znak!="\n"){
             if(znak==" "){
                        tab[i][j]=calosc;
                        j++;
                        calosc="";
                        }else{
                              calosc+=znak;
                              }
                        }else{
                              tab[i][j]=calosc;
                              i++;
                              j=0;
                              calosc="";
                              }
                          }
    for(i=0;i<4;i++)
    for(j=0;j<4;j++)
    cout<<"tab["<<i<<"]["<<j<<"]="<<tab[i][j]<<endl;
    dane_we.close();
    return 0;   
}
W taki sposob kod jest ok, jest tylko maly problem - nie wpisuje mi ostatniej liczby, tzn. komorka macierzy (3,3) jest pusta !

Ktos wie, jak wczytac pierwsza liczbe (u mnie np. 2 ) do zmiennej, a nastepne juz do tablicy o rozmiarze n^2xn^2 ? I jeszcze skonwertowac to na int, zeby tablica byla int** tab, a nie string tab ..

EDIT:

Kod: Zaznacz cały

#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;

int main(int argc, char *argv[]){
    ifstream dane_we;
    int n,rozmiar;
    dane_we.open(argv[1],ios::in);
    
    dane_we>>n;
    rozmiar=n*n;
    cout<<"Rozmiar:"<<rozmiar<<endl;
    
    int** tab;
    
    tab = new int*[rozmiar];
    for(int i=0;i<rozmiar;i++)
            tab[i] = new int[rozmiar];
    
    int k=0;
    while(dane_we)
          dane_we>>tab[k++][k++];

    for(int i=0;i<rozmiar;i++){
               for(int j=0;j<rozmiar;j++){
                   cout<<tab[i][j]<<" ";
                       if(j==rozmiar-1)
                           cout<<"\n";
                           }
                       }

    dane_we.close();
    system("Pause");
    return 0;   
}
Wywala się ... podejrzewam błąd z tablicą/wpisywaniem do niej. Pokombinuję jeszcze, - ale pomoc mile widziana ;)
Awatar użytkownika
Tares
Sędziwy Jeż
Sędziwy Jeż
Posty: 55
Rejestracja: 05 maja 2006, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

Odp: [C++]Wczytanie liczb z pliku do tablicy - problem

Post autor: Tares »

Coś chyba masz źle z wczytywaniem pliku ;) bo Twój kod mi w ogóle nie działa.

Na szybko coś takiego machnąłem, może Ci się przyda :

Kod: Zaznacz cały

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char *argv[]){

	bool first_line=true;
	char n;
	vector<char> tab;

	ifstream plik ( argv[1] , ifstream::in );

	while (plik.good() && !plik.eof()) {
		if(first_line) {
			n = plik.get();
			first_line=false;	
		} else {
			tab.push_back( plik.get() );
		}
	}

	plik.close();

	cout<<n<<endl;
	for(unsigned int i=0; i < tab.size() ; i++) {
		if( tab.at(i) == '\n' ) cout<<endl;
		cout<<tab.at(i);	
	}

	return 0;   
}
^_^;
mazix2
Sędziwy Jeż
Sędziwy Jeż
Posty: 75
Rejestracja: 11 gru 2009, 10:01
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++]Wczytanie liczb z pliku do tablicy - problem

Post autor: mazix2 »

Oooo dziekuje pieknie ! :)

Ja tez cos mam, troche inaczej, ale eraz juz dziala, moze komus sie przyda :)

Temat mozna zamknac :)

Kod: Zaznacz cały

#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
using namespace std;

int main(int argc, char *argv[]){
    ifstream dane_we;
    int n,rozmiar;
    dane_we.open(argv[1],ios::in);
    
    dane_we>>n;
    rozmiar=n*n;
    cout<<"Rozmiar:"<<rozmiar<<endl;
    
    int** tab;
    
    tab = new int*[rozmiar];
    for(int i=0;i<rozmiar;i++)
            tab[i] = new int[rozmiar];
    
    for(int i=0;i<rozmiar;i++)
           for(int j=0;j<rozmiar;j++)
                   dane_we>>tab[i][j];
    

    for(int i=0;i<rozmiar;i++){
               for(int j=0;j<rozmiar;j++){
                   cout<<tab[i][j]<<" ";
                       if(j==rozmiar-1)
                           cout<<"\n";
                           }
                       }

    dane_we.close();
    system("Pause");
    return 0;   
}
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości