Strumieniowy odczyt pliku - zakres

Awatar użytkownika
Harry Xin
Użytkownik
Użytkownik
Posty: 545
Rejestracja: 9 sie 2007, o 19:15
Płeć: Mężczyzna
Podziękował: 148 razy
Pomógł: 83 razy

Strumieniowy odczyt pliku - zakres

Post autor: Harry Xin »

Zadaniem jest wczytanie liczb typu rzeczywistego z pliku i zapisanie ich w tablicy. Nie wiem czemu, ale stworzona aplikacja wykracza poza zakres pliku - jeżeli plik się skończy bo nie ma w nim tylu liczb to zaczynają się pojawiać przypadkowe wartości, ale nie jest zgłaszany błąd i program funkcjonuje.
Czy funkcja eof() nie jest wystarczającym zabezpieczeniem?

Kod: Zaznacz cały

#include "stdafx.h"
#include <iostream>
#include <fstream>

using namespace std;

void main()
{
	const int Max=1000;
	float TAB[Max];
	int ilosc;

	fstream plik("liczby.txt",ios::in);

	if(!plik.good())
	{
		cout << "Wystapil problem przy probie otwarcia pliku tekstowego. Aplikacja zostanie" << endl;
		cout << "zamknieta.";
		cin.ignore(cin.rdbuf()->in_avail());
		cin.get();
		return;
	}

	do
	 {
	  cout << "Podaj wymagana ilosc elementow (nie wiecej niz 1000): ";
	  cin >> ilosc;
	 }
    while(ilosc>Max);

	float *tab=TAB;
	for(int i=0;(i<ilosc)&&(!plik.eof());i++) plik >> *tab++;

	tab=TAB;
	plik.close();

	int precyzja;
	do
	 {
	  cout << "Z jaka precyzja maja sie wyswietlac podane liczby? ";
	  cin >> precyzja;
	 }
	while(precyzja<0||precyzja>8);

	for(int i=0;i<ilosc;i++) cout << *tab++ << " ";

	cout << endl << endl << "Aby zakonczy, nacisnij ENTER.";
	cin.ignore(cin.rdbuf()->in_avail());
	cin.get();
}
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

Strumieniowy odczyt pliku - zakres

Post autor: spajder »

wczytuje dobrze, ale jak nie ma dostatecznej ilości liczb to musisz zmienić zmienną ilość (bo tyle liczb potem wypisujesz)
Awatar użytkownika
Harry Xin
Użytkownik
Użytkownik
Posty: 545
Rejestracja: 9 sie 2007, o 19:15
Płeć: Mężczyzna
Podziękował: 148 razy
Pomógł: 83 razy

Strumieniowy odczyt pliku - zakres

Post autor: Harry Xin »

Wystarczyło zamienić:

Kod: Zaznacz cały

for(int i=0;(i<ilosc)&&(!plik.eof());i++) plik >> *tab++;
na:
Ukryta treść:    
ODPOWIEDZ