• 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

0 głosów
634 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 (195,220 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 474 wizyt
0 głosów
1 odpowiedź 364 wizyt
pytanie zadane 29 marca 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
1 odpowiedź 332 wizyt
pytanie zadane 26 sierpnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)

93,778 zapytań

142,736 odpowiedzi

323,388 komentarzy

63,382 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...