Błąd z odczytem danych z pliku

0

Witam. Mam problem, kompletnie nie wiem jak odczytywać dane z pliku. Mam zrobić na zadanie program który porówna liczby z pliku (w moim przypadku jest ich 1000), wyświetli najmniejszą i największą a także wiersz w którym się one znajdują. Mój pomysł był taki żeby przed while(getline(plik,linia)) pobrał pierwszą wartość i porównywał z nią. Nie mam zielonego pojęcia jak to zrobić, tak samo jak pozostałe liczby. Ogólnie rzecz biorąc program nie pobiera żadnych danych z pliku :/

 
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <string>
using namespace std;

main()
{
      int a,b,d,f,g,h,i,j,k;
      int numer_linii=2;
    
      long liczba[numer_linii];
      fstream plik;
      f=numer_linii;
      plik.open("C:\\Users\\Kamil\\Desktop\\dane\\liczby.txt", ios::in);
      if(plik.good()==false)
      {
                            cout<<"Plik nie istnieje"<<endl;
                           
      }
      string linia;
      h=j;
            
             while(getline(plik,linia))
                                       {
                                       h++;
                                       a=liczba[numer_linii];
                                       numer_linii++;
                                                      if(a>b)
                                                             {
                                                             g=a;
                                                             i=h;
                                                              }
                                                      if(b>a)
                                                         {
                                                      j=b;
                                                      k=h;
                                                          }
                                                      }
            
             plik.close();
            plik >> linia;
    system("PAUSE");
    return EXIT_SUCCESS;
}

To ma być mniej więcej coś takiego (tylko tutaj coś zepsułem z wierszem najmniejszej liczby)

 
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
main()
{
      long a,b,c,d,e,f,g,h;
      cout<<"Wprowadź ilość liczb "<<endl;
      cin>>a;
            cout<<"Wprowadź wartość liczby " <<endl;
      cin>>b;
      c = b;
      d = b;
      e=1;
      f=1;
      for(int i = 2; i<=a; i++)
      { 
      e++;
         cin>>b;
        
         if(b>= c)
         {
         c=b;
         g=e;
         }
         if(b<d)
         {
                d=b;
                h=e;
                
         }
      }
      cout<<"Największa liczba zbioru to: "<<c<<" Znajduje się ona w wersie: "<<g<<endl;
      cout<<"Najmniejsza liczba zzbioru to: "<<d<<" Znajduje się ona w wersie: "<<h<<endl;    
      system("PAUSE");         
}

1

Od ręki, nie testowałem:

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

int main()
{
	int max, min, maxl, minl, line;
	maxl = minl = line = 1;
	ifstream plik;
	plik.open("xx.txt");
	
	while(!plik.eof())
	{
		int x;
		plik >> x;
		
		if(line == 1){
			max = x;
			min = x;
		}else{
			if(x > max){
				max = x;
				maxl = line;
			}else if(x < min){
				min = x;
				minl = line;
			}
		}
		line++;
	}
	
	cout << "Najwieksza to: " << max << ", linia: " << maxl << endl;
	cout << "Najmniejsza to: " << min << ", linia: " << minl << endl;
    plik.close();
}
0

Błędu nie wywala, jednakże znów nie wczytuje mi danych po wpisaniu ścieżki pliku :/
Inna sprawa jest taka, że tak mi się wydaje że jeśli plik zawierałby tylko liczby na - to jako max wyświetli 1 a nie inną liczbę

1
  1. Plik tekstowy wrzucasz do tej samej lokalizacji, co plik .cpp - nie kombinuj ze ścieżką bezwzględną. Zmień tylko na swoją nazwę zamiast mojego ("xx.txt")
  2. O tym pomyślałem. Będzie prawidłowo, bo pierwsza liczba jest ustalana w pierwszym przebiegu pętli. Jako jeden oznaczyłem od razu pierwszą linię.
0

Znów nic, zmieniłem tylko nazwę, dodatkowo ściągnąłem inny program - też nic. Odpaliłem program kolegi - jego zadziałał.

0

Działać działa na normalnych liczbach (na jakichś małych), jednakże ja mam liczby zapisane w systemie 2-kowym, powinien też i na binarnym działać (bo jeśli liczba zapisana w binarnym jest większa od innej, to będzie też większa w normalnym). I tam wyświetla mi jakieś niestworzone liczby. Użyłem long bo niektóre z nich mają po 255 miejsc po przecinku.

#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

main()
{
      fstream plik;
      long x;
      long max,maxp,min,minp,nr_linii;
      nr_linii=maxp=minp=1;
      
      string linia;
      plik.open("liczby.txt", ios::in);
      if(plik.good()==false)
      {
                            cout<<"Plik nie istnieje"<<endl;
                            exit(0);
      }
      while(getline(plik,linia))
      {
                               x=atol(linia.c_str());
                               if(nr_linii==1)
                               {
                                             max=x;
                                             min=x;
                               }
                               else
                               {
                                   if(x>max)
                                   {
                                            max=x;
                                            maxp=nr_linii;
                                   }
                                   if(x<min)
                                   {
                                            min=x;
                                            minp=nr_linii;
                                   }
                               }
                               nr_linii++;
                              
      }
      cout<<"Najmniejsza liczba to: "<<min<<" Znajduje się w: " <<minp << "wierszu"<<endl;
     cout<<"Najwieksza liczba to: "<<max<<" Znajduje się w: " <<maxp << "wierszu"<<endl;
     plik.close();
    system("PAUSE");
    return EXIT_SUCCESS;
}

 

Już poprawiłem sam, temat do zamknięcia.

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