Opis co powinno się dziać:
Program powinien najpierw wylosować i zapisać 30 liczb do pliku wylosowane.txt. Następnie, wszystkie liczby skonwertować na wybrany system i zapisać w pliku konwersja.txt:
w jednej kolumnie liczby w postaci decymalnej, a w drugiej w postaci binarnej.
Opis problemu:
Plik wylosowane.txt jest zapisany poprawnie, jednak Getline, który znajduje się w linii 38 świruje i wyłącza się po 4 liniach konwersji.
Odwrócony zapis binarny nie jest na ten moment problemem. Zajmę się nim po tym, jak getline przestanie być francuskim pieskiem, który kończy kiedy mu się podoba.
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <fstream>
#include <string>
using namespace std;
main() {
srand(time(NULL));
int losowe = 30, a, iLiczba, i = 0, wybor, tablica[30], konwersja[30];
string Liczba;
// WYLOSOWANE LICZBY
fstream plik, plik2;
plik.open("wylosowane.txt", ios::out);
while(losowe>0){
a = rand()%513;
cout<<a<<endl;
plik<<a<<endl;
losowe--;
}
plik.close();
cout<<"Na jaki system liczbowy je zamienic?"<<endl<<"1. Binarny"<<endl<<"2. Oktalny"<<endl<<"3. Heksadecymalny"<<endl;
cin>>wybor;
switch(wybor){
case 1:// BINARNY
plik.open("wylosowane.txt", ios::in);// Otwiera pliki
plik2.open("konwersja.txt", ios::out);
plik2<<"Konwersja na system binarny"<<endl;// Informuje o systemie
while(getline(plik, Liczba)){// "Zbiera linię"
iLiczba = atoi(Liczba.c_str());// Konwertuje ascii na int
plik2<<iLiczba<<" ";// Lewa kolumna - wartosc decymalna, prawa - binarna
while(iLiczba != 0){
konwersja[i] = iLiczba % 2;// Wynik dzielenia liczby modulo
plik2<<konwersja[i];
iLiczba = iLiczba / 2;// liczba / 2
i++;
}
plik2<<endl;// Przejście do nowego wiersza tabeli
}
plik.close();// Zamknięcie plików
plik2.close();
break;
case 2:// OKTALNY
plik.open("wylosowane.txt", ios::in);
plik2.open("konwersja.txt", ios::out);
while(getline(plik, Liczba)){
}
plik.close();
plik2.close();
break;
case 3:// HEKSADECYMALNY
plik.open("wylosowane.txt", ios::in);
plik2.open("konwersja.txt", ios::out);
while(getline(plik, Liczba)){
}
plik.close();
plik2.close();
break;
}
return 0;
}
A oto i wyniki
Mam nadzieję, że wszystko jasno wytłumaczone :)