Obsługą plików C++.

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:

#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;
}
2

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

#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:

#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;
}
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?

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.

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

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1