• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

while(getline...) kończy pracę, zanim funkcja dojdzie do końca pliku

Object Storage Arubacloud
0 głosów
304 wizyt
pytanie zadane 27 kwietnia 2020 w C i C++ przez Emiel Regis Nowicjusz (120 p.)
edycja 27 kwietnia 2020 przez Emiel Regis

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

komentarz 27 kwietnia 2020 przez SimiVoid Pasjonat (19,790 p.)
Nie wiem w czym jest problem, bo umie wszystko działa jak należy. Usuń wszystkie pliki generowane przez program i spróbuj skompilować jeszcze raz.
komentarz 27 kwietnia 2020 przez Emiel Regis Nowicjusz (120 p.)
Lekki postęp jest... Teraz zatrzymuje się po 5 liniach.
1
komentarz 27 kwietnia 2020 przez SimiVoid Pasjonat (19,790 p.)
Problem może leżeć po stronie twojego środowiska programistycznego, które jest niewspierane od lat, jest do dupy i nie nadaje się do niczego. Polecam ci zmienić IDE bo przy użycie Dev C++ za daleko nie zajdziesz.
komentarz 27 kwietnia 2020 przez Emiel Regis Nowicjusz (120 p.)
Właśnie też o tym pomyślałem. Już jestem w trakcie pobierania VisualStudio
komentarz 28 kwietnia 2020 przez Eriss69 Gaduła (4,470 p.)
Polecam ci visual studio , lub od jetbrains :)
komentarz 28 kwietnia 2020 przez SimiVoid Pasjonat (19,790 p.)
Clion od jetbrains jest płatny (za darmo na licencji studenckiej), a Visual Studio w wersji community jest całkowicie darmowe
komentarz 28 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

@Emiel Regis,

while(getline(plik, Liczba)){//                         "Zbiera linię"
        iLiczba = atoi(Liczba.c_str());// 

Takie trochę wymyślanie koła na nowo, a można przecież prościej:

while(plik >> iLiczba) {
        ...
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 265 wizyt
0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 29 marca 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 26 sierpnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)

92,551 zapytań

141,399 odpowiedzi

319,530 komentarzy

61,937 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...