Czytanie z pliku, wskazniki - maly problem

0

Czesc. Probuje napisac funkcje, ktora czyta liczby z pliku i przepisuje je odwrotnie do drugiego
Mam maly problem poniewaz z moim kodem ucina jedna liczbe. Np. input: 1 2 3 4; output: 4 3 2
Problem nie wystepuje gdy usune if...else, a chce ja miec, zeby jak nie ma danych to nie alokuje zadnej tablicy.
PS wybaczcie za bledy w kodzie lub braki. Gdy rozwiaze problem to bede dopieszczal formatowanie, nazewnictwo itp

#include <iostream>
#include <cstdlib>
#include <ctime>

#include <iostream>
#include <fstream>

using namespace std;

float *funkcja(int &zmienna, istream &input) {

	float number, *tab;

	if(!(input >> number)) {

		return 0;

	} else {

		int size = 2;
		tab = new float[size];

		while(input >> number) {

		tab[zmienna] = number;
		zmienna++;

		double test = tab[zmienna];
        double testNumb = number;

			if (zmienna == size) {

				float *tab2 = new float[size *= 2];
				for (int i = 0; i < zmienna; i++) {
					tab2[i] = tab[i];
				}
				delete[] tab;
				tab = tab2;
			}
		}

		return tab;

	}
}

int main() {

	ifstream input("input.txt");
	ofstream output("output.txt");

	int zmienna = 0;

	float *tab = funkcja(zmienna, input);
	tab += (zmienna-1);

	for (int i = 0; i < zmienna; i++) {
		output << *tab-- << " ";
	}

	output.close();
	input.close();

	return 0;
}



0

https://m.youtube.com/playlist?list=PL5D59D2682ED5B2EA
Krzystaj z techniki debugowania.

1

Gdy rozwiaze problem to bede dopieszczal formatowanie, nazewnictwo itp

Rób to od razu, nikomu się nie chce czytać takiego spagetti.

Nie używaj new i delete, zamiast tego do tablic użyj std::vector.

edit: dobra, przejrzałem i w tym fragmencie wczytujesz pierwszą wartość, ale nic z nią nie robisz:

    if(!(input >> number)) {
0

@kq:
Niestety musze to miec z new i delete, takie wymagania

W tym ifie chcialem sprawdzic, ze jesli wczytanie (input >> number) zwroci falsz to funkcja zwraca 0, (bo nie udal sie wczytac danych (liczby)
Czyli jak plik ma dane to ten if i tak pobiera pierwsza wartosc nawet jak instrukcja nie jest wykonywana? Wtedy w petli while wczytywana jest nastepna wartosc?

To jak moge sprawdzic wczesniej czy z pliku moge pobrac wartosc?

0

Warunek ifa jest wykonywany zawsze.

Sprawdzasz dobrze, ale jeśli pobrałeś number to go użyj. Zamień pętlę while na do..while albo przed pętlą dodaj wczytany element do tablicy.

A prowadzącemu kup kalendarz, może nawet być na 2015 i wyraźnie wskaż, że mamy już XXI wiek.

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