Najmniejsza liczba w pliku

0

Witajcie
Mam napisać progra wyświetlający na ekranie największą i najmniejszą liczbę z pliku. Z tym pierwszym nie ma problemu, ale drugie nie działa (cały program działa, ale nie wyświetla dobrej liczby).

#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;

void max (ifstream& swej);
void min (ifstream& swej);

int main()
{
 ifstream pwej;
 pwej.open("lista.txt");
 if (pwej.fail() )
 {
  cout << "Nie udało się otworzyć pliku";
  exit (1);
 }
 
 max (pwej);
 min (pwej);
 
 pwej.close();
 return (0);
}

void max (ifstream& swej)
{ 
 int liczba, test(0);
 while (swej >> liczba)
 {
  if (test < liczba)
  {
   test=liczba;
  }
 }
 cout << "Największa liczba w pliku: " << test << endl;

}

void min (ifstream& swej)
{
 int test, liczba;

 while (swej >> liczba)
 {
  if (test > liczba)
  {
   test = liczba;
  }
 }
 cout << "Najmniejsza liczba w pliku to: " << test << endl;
}
 

co mam źle?

0

bo jak wczytasz liczby z pliku w maxie to co w minie ma ta funkcja wyczytywac? musisz jedno i drugie naraz znalezc, poza tym powinienes najpierw przypisac pierwszy wczytany element do zmiennych testujacych, ewentualnie min i max z zakresu int'a

0
  1. max też nie działa stwórz plik o zawartości: -10 -9 -8 i zobacz co ci wypisze max
  2. pomiędzy wywołaniami zapodaj plik.clear(); plik.seekg(0,ios::beg);
0

miałem już tak i też nie działało:

#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;

void wyswietlanie (ifstream& swej);

int main()
{
 ifstream pwej;
 pwej.open("lista.txt");
 if (pwej.fail() )
 {
  cout << "Nie udało się otworzyć pliku";
  exit (1);
 }
 
 wyswietlanie (pwej);
 
 pwej.close();
 return (0);
}

void wyswietlanie (ifstream& swej)
{ 
 int liczba, test_min(0), test_max(0);
 
 swej >> liczba;
 liczba = test_min;
 liczba = test_max;
 
 while (swej >> liczba)
 {
  if (test_max < liczba)
  {
   test_max = liczba;
  }
  
  if (test_min > liczba)
  {
   test_min = liczba;
  }
 }
 cout << "Największa i najmniejsza liczba w pliku: " << test_max << " i " << test_min << endl;

}

wyświetlane jest zero jako najmniejsza mimo, że w pliku nie ma zera

0
_13th_Dragon napisał(a)
  1. max też nie działa stwórz plik o zawartości: -10 -9 -8 i zobacz co ci wypisze max
  2. pomiędzy wywołaniami zapodaj plik.clear(); plik.seekg(0,ios::beg);

dzięki wsio działa ale i tak jest zle... powód? dopiero zacząłem nauke c++, skończyłem pierwszy tom "Programowanie w tonacji c++" i jeszcze nie miałem clear ani seekg:( czyli to sie jakos prosciej robi a ja nie mam pojecia jak;(

0

Oczywiście i to na dwa warianty:

  1. Obliczać min max w jednym czytaniu pliku.
  2. Po obliczeniu max zamknąć plik oraz otworzyć go znowu (koniecznie ma być inna zmienna fstream).

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