Obsługą plików C++.

Obsługą plików C++.
Madaless
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:14
0

Witam Mam w pliku wejściowym 1095 linni w każdej są 2 liczby(zapisane binarnie) ta po lewej to godzina po prawej temperatra .Każdą z tych cyfr chce wpisać do tablicy jedną kolumnę cyfr do tablicy A drugą do tablicy B żeby w przyszłości mógł nimi łatwiej manipulować(wykonać zadania).Problem polega na tym że po 42 elemencie tablicy wszystko zaczyna się pierniczyć(patrz załącznik plik dane_systemy1 to wejsciowy ,a wynik wyjsciowy), natomiast gdy napisałem program który linijki zapisywał jako stringi wszystko działało.Dlaczego ta metoda jest zła bądź co ja robię żle ?

Kod:

Kopiuj
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    ifstream wejscie("dane_systemy1.txt");
    ofstream wyjscie("wynik.txt");
    int a[1095];
    int b[1095];

    for(int i=0;i<1095;i++)
    {
        wejscie>>a[i]>>b[i];
    }

    for(int i=0;i<1095;i++)
    {
        wyjscie<<i<<" "<<a[i]<<" "<<b[i]<<endl;
    }
    
    wejscie.close();
    wyjscie.close();


    return 0;
}
edytowany 3x, ostatnio: Madaless
mwl4
  • Rejestracja:około 12 lat
  • Ostatnio:20 dni
  • Lokalizacja:Wrocław
  • Postów:399
2

Kończy się zakres zmiennych. Wczytujesz liczby binarne dziesiętnie.

Kopiuj
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
	const int n = 50;
    string a[n];
    string b[n];
 
    for(int i = 0; i < n; ++i)
    {
        cin >> a[i] >> b[i];
    }
 
    for(int i = 0; i < n; ++i)
    {
        cout << i << " " << stoi(a[i], 0, 2) << " " << stoi(b[i], 0, 2) << endl;
    }
 
    return 0;
}

http://ideone.com/j8OdZ3

Zamiast cout/cin wstaw strumień pliku.

Ewentualnie:

Kopiuj
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
 
int main()
{
	const int n = 50;
    int a[n];
    int b[n];
    for(int i = 0; i < n; ++i)
    {
    	string inp;
        cin >> inp;
        a[i] = stoi(inp, 0, 2);
        cin >> inp;
        b[i] = stoi(inp, 0, 2);
    }
 
    for(int i = 0; i < n; ++i)
    {
        cout << i << " " << a[i] << " " << b[i] << endl;
    }
 
    return 0;
}

Asm/C/C++
edytowany 1x, ostatnio: mwl4
Madaless
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:14
0

Zmieniłem, coś nie działa tylko w code blocksie pisze że stoi not declared ale mniejsza. Więc nie można liczb binarnych dziesiętnie bo szybko wychodze poza zakres?

edytowany 1x, ostatnio: Madaless
kaczus
pewnie masz starsze gcc, domyślnie nie kompiluje w standardzie c++11, a tam się pojawia stoi, musisz albo zmienić parametry kompilacji, albo użyć strtol...
mwl4
  • Rejestracja:około 12 lat
  • Ostatnio:20 dni
  • Lokalizacja:Wrocław
  • Postów:399
1

std::stoi jest zdefiniowane w <string>, więc musisz zaincludować.
Zakres int to -2147483648..+2147483647. Więc to bardzo kiepski pomysł, bo wystarczy już tylko 10 bitów żeby wyjść poza zakres. Dużo lepiej jest wczytać te liczby jako binarne, i zapisać normalnie w int.

Ewentualnie jeśli bitów jest dużo i nie zmieszczą się już nawet w unsigned long long (8 bajtów), to wtedy trzymać jako stringi.


Asm/C/C++
edytowany 3x, ostatnio: mwl4
Madaless
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:14
0

Dzięki wielki za pomoc wiem że w bibiotecę string po prostu to bug cb http://stackoverflow.com/questions/23063125/stoi-codeblocks-not-working

mwl4
Musisz włączyć obsługę C++11.
Madaless
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad 7 lat
  • Postów:14
0

Dla osób z problemem stoi polecam oto rozwiązanie http://tehsausage.com/mingw-to-string

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.