Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]Otwieranie kolejnych plików i zapis danych w tablicy.

Ostatnio zmodyfikowano 2014-03-08 20:35
Autor Wiadomość
dziubeQ
Temat założony przez niniejszego użytkownika
[C++]Otwieranie kolejnych plików i zapis danych w tablicy.
» 2014-03-08 17:32:32
Mam za zadanie napisać program analizujący statystyczne dane liczbowe. Poradziłem sobie z otwarciem wszystkich plików, które bym chciał, jednak wystąpił problem, gdyż dane liczbowe zapisane w tablicy są typu string. Będę wykonywał na nich obliczenia więc wolałbym je jaki int kiedy zmieniam definicję program nie kompiluje się.

Oto kod:
C/C++
#include <iostream>
#include <fstream>
#include <iomanip.h>


using namespace std;


int poczatek, koniec;

void drukowanie() {
    do {
        cout << "\nPodaj numer pierwszego pomiaru: ";
        cin >> poczatek;
        cout << "Podaj numer ostatniego pomiaru: ";
        cin >> koniec;
    }
    while( koniec < poczatek );
   
    int size = 0;
   
    for( int licznik = poczatek; licznik <= koniec; licznik++ )
    {
        char sciezka[ 260 ] = "C:\\zap";
        const char rozszerzenie[ 5 ] = ".txt";
        char licz[ 3 ];
        string tresc;
       
       
        ifstream otworz;
       
        strcpy( sciezka, "C:\\zap\\" );
        itoa( licznik, licz, 10 );
        strcat( sciezka, licz );
        strcat( sciezka, rozszerzenie );
        otworz.open( sciezka );
       
        if( otworz.good() == true )
             cout << "Pomiar " << licznik << ": " << setw( 5 );
        else cout << "Pomiar " << licznik << " niedostepny";
       
        while( otworz.good() == true )
        {
            getline( otworz, tresc );
            size++;
            cout << tresc << setw( 3 );
        }
        cout << endl;
        otworz.close();
       
        int tab[ size ];
    }
   
    for( int licznik = poczatek; licznik <= koniec; licznik++ )
    {
        char sciezka[ 260 ] = "C:\\zap";
        const char rozszerzenie[ 5 ] = ".txt";
        char licz[ 3 ];
        string tresc, tab[ size ];
        int k = 0;
       
        ifstream otworz;
       
        strcpy( sciezka, "C:\\zap\\" );
        itoa( licznik, licz, 10 );
        strcat( sciezka, licz );
        strcat( sciezka, rozszerzenie );
        otworz.open( sciezka );
       
        while( otworz.good() == true )
        {
            getline( otworz, tresc );
            tab[ k ] = tresc;
            k++;
        }
       
        otworz.close();
    }
   
}


int wybor;
int main()
Ktoś pomoże, jak mam to rozwiązać albo gdzie zmienić kod.
P-105867
pekfos
» 2014-03-08 17:43:21
Użyj atoi() do zamiany tekstu na int. Przy okazji popraw nagłówek iomanip.h na iomanip i tworzenie tablic (wszystkie tablice tab są niepoprawnie utworzone)
P-105868
dziubeQ
Temat założony przez niniejszego użytkownika
» 2014-03-08 17:59:17
Wiem, wyświetla mi, że tablica jest zła, ale deklarując ją globalnie nie znam jeszcze size, czyli ilości liczb :/
A jak mam ją w funkcji to potem i tak nie mogę z tej tablicy skorzystać poza nią... Nie ogarniam

@edit: atof działa, tylko nie wiem jak poradzić sobie z tą tablicą. Jak wpisuje w main drukowanie całej forem i<size to jest undeclared :/

@edit2: atof wyzerował mi wszystkie liczby przypisane do pierwszej tablicy stringów. Z sizem poza funkcją już sobie poradziłem.
P-105871
MrPoxipol
» 2014-03-08 19:56:16
@edit2: atof wyzerował mi wszystkie liczby przypisane do pierwszej tablicy stringów.
atof() zwraca 0 jeśli string nie zawiera liczby.
P-105879
dziubeQ
Temat założony przez niniejszego użytkownika
» 2014-03-08 20:35:29
string powinien zawierać liczbę, jednak teraz jak chce wydrukować tę tablicę stringów nic nie wyświetla a jak drukuję double'ów to wyskakuje mi tyle zer ile powinno być różnych liczb.

KOD:
while( otworz.good() == true )
        {
            getline( otworz, tresc );
            tab[ k ] = atof(tresc.c_str());
            k++;
        }

lub:
double a[256];
        for(int z=0; z<dl; z++)
            a[z]=atoi(tab[z].c_str()) ;

oba do stringów nic, do intów/double'ów zera.
P-105883
« 1 »
  Strona 1 z 1