Ofstream, program wypluwa głupoty

0

Mam plik w którym mam 1000 cyfrowa liczbe w pliku liczby2.t:xt, chciałbym ją podzielić na zasadzie cyfra spacja cyfra spacja itd.

program który napisałem wyglada nastepujaco:

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

int main(int argc, char** argv) {
	string d;
	int i;
	ifstream liczby2("liczby2.txt");
	ofstream liczby3("liczby3.txt");
	liczby2>>d;
	for(i=0; i<1000;i++)
	{liczby3<<d.at(i)<<" ";}
	
	return 0;
}

Program dla małych i działa prawidłowo (np dla 25 w pliku wypisuje 25 pierwszych cyfr liczby oddzielonej spacjami) dla większych i natomiast w pliku wypisuje znaki nijak mające się do cyfr. Byłbym wdzięczny gdyby ktoś mógł mi powiedzieć co jest nie tak z moim programem.

0
#include <fstream>
#include <string>
using namespace std;
 
int main()
  {
   ifstream liczby2("liczby2.txt");
   ofstream liczby3("liczby3.txt");
   string d;
   while(liczby2>>d)
     {
      for(size_t i=0;i<d.size();++i) liczby3<<d[i]<<' ';
      liczby3<<endl;
     }
   return 0;
  }
0

Do pana/pani z góry - dzięki za pomoc ale mi bardziej chodzi o wytłumaczenie dlaczego mój program nie działa.
Próbowałem też zastąpić at poprzez substr ale nie zmienia to nic, program dalej wypluwa znaczki.

0

Z opisu błędu wynika, że cyfry w pliku masz pogrupowane po 25 cyfr, więc liczby2>>d wczytuje ci grupę cyfr, a nie całą liczbę.

int main(int argc, char** argv) {
        string d;
        int i;
        ifstream liczby2("liczby2.txt");
        ofstream liczby3("liczby3.txt");
        while(liczby2>>d) {
            for(i=0; i<d.lenght();i++) {
                  liczby3<<d.at(i)<<" ";
            }
         }
        return 0;
}
0

Liczby nie są pogrupowane po 25, jest to tak jak mówiłem liczba 1000 cyfrowa, 25 było tylko przykładowym i dla którego program działa, jeżeli zastąpie je przez np. 100 program wypisuje znaczki

0
Mam problem napisał(a):

Do pana/pani z góry - dzięki za pomoc ale mi bardziej chodzi o wytłumaczenie dlaczego mój program nie działa.

Ponieważ zawsze wypisujesz 1000 elementów zaś we wczytanym string'u nie ma tyle, więc wyświetlasz jakieś śmiecie który przypadkiem podwinęli ci się po pamięci przydzielonej dla napisu.

0

Ponownie do pana z góry, funkcja d.length() zwraca wartość 1000, więc string jest długości 1000 a nie innej, jeżeli są jakieś wątpliwości co do poprawności danych w pliku liczby2.txt moge ten plik podrzucić.

wybaczcie spam, podrzucam link do pliku liczby2.txt. Plik w załączniku lub http://www.sendspace.pl/file/f33df4eec786fa873b7b739

0

Sprawdź kodowanie plików. Bo jeżeli plik ma dokładnie 1000 cyfr to twój kod musi działać. Jeżeli nie działa to oznacza tylko jedno - w pliku nie jest to co myślisz że jest.

0

Nie ma siły to musi działać. Jedyna przyczyna, by to nie działało to to, że masz coś pokręcone z plikami i katalogami, w efekcie czego program wczytuje plik z innej lokalizacji niż ci się wydaje.

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