logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Początkujący w C++ - czytanie z pliku kolejnych wyrazów

Borys85 30 Gru 2005 17:33 24117 7
REKLAMA
  • #1 2131006
    Borys85
    Poziom 19  
    Posty: 447
    Pomógł: 6
    Ocena: 5
    Mam do przygotowaia pewien projekt (związany z hashowaniem) - 90% mam już zrobione, nie moge sobie tylko poradzić z jedną funkcją.

    Otóż ta funkcja ma zczytywać kolejne wyrazy z pewnego pliku i wrzucać do tabeli (jedna litera - jedna komórka). Jak rozróżniać koniec wyrazu to wiem.

    Problem w tym, że nie wiem:
    a) jak czytać kolejne znaki (nie wyrazy, czy wiersze)
    b) jak rozpoznać koniec pliku (komenda rozpoznająca ilść znaków w plików)

    PS Przycisk SZUKAJ na forum dzisiaj nie działa.
  • REKLAMA
  • #2 2133101
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Lancuch (wiersz) odczytujesz za pomoca f. getline.
    Pozniej w petelce mozesz sobie odczytac znak po znaku.

    Obiekt cin (lub plik) posiada takze metody umozliwiajace odczyt pojedynczego znaku.

    Ale moze lepiej pokaze maly pzyklad:

      is.open ( "filename.txt" );
      while ( is.good() )
      {
        int c = is.get();
        cout << c;
      }
      is.close();
  • REKLAMA
  • #3 2133830
    Borys85
    Poziom 19  
    Posty: 447
    Pomógł: 6
    Ocena: 5
    Kostrukcję rozumiem, ale nie znam komend:

    is.open (znam fopen)
    is.close (znam fclose)
    is.get
    is.good.

    Z tymi omendami nie mogę sobie poradzić (nie mogę skompilować programu...)

    Proszę o pomoc
  • REKLAMA
  • #4 2134007
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Przez chwile zrob to co robi ten koles w twojej ikonie (po lewej)...joke

    Zmien temat na Poczatkujacy w C i uzywaj fopen, fclose fread, fwrite, itp.

    Albo wkoncu poszukaj w necie co to jest fstream. Znakdziesz odpowiedz na pytanie jak skompilowac moj kod i co to za funkcje ktore podalem.

    Aha jesli piszesz juz o tym ze nie mozesz skompilowac programu i nie optrafisz sobie poradzic. napis chociaz na czym polega problem podczas kompilacji. Czy dostales jakies ostrzezenia bledy, napisz jakie.
  • REKLAMA
  • #5 2134112
    Borys85
    Poziom 19  
    Posty: 447
    Pomógł: 6
    Ocena: 5
    d:\borys\zapisz.cpp(15) : error C2065: 'good' : undeclared identifier
    d:\borys\zapisz.cpp(17) : error C2228: left of '.get' must have class/struct/union type
    d:\borys\zapisz.cpp(20) : error C2228: left of '.close' must have class/struct/union type
  • #6 2134204
    one_eddie
    Poziom 25  
    Posty: 973
    Pomógł: 62
    Ocena: 14
    Dodaj jeszcze zrodla ktore kompilowlaes w calosci i bedzie komplet - wtedy postawie diagnoze :)

    Narazie moge strzelac: nie dolaczyles bibliotek lub nie podales przestrzeni nazw.
  • #7 2134438
    kordan11
    Poziom 18  
    Posty: 241
    Pomógł: 24
    Ocena: 10
    tym sprawdzisz czy plik sie otworzył
    ifstream infile("wyniki.txt");
    if (!infile) return(instrukcje);
    

    musisz zadeklarować biblioteke fstream.h
  • #8 2258998
    Borys85
    Poziom 19  
    Posty: 447
    Pomógł: 6
    Ocena: 5
    Ja to rozwiązałem w taki sposób.

    void czytaj(char word[], int hashtable[], int xx)
    {
    
    	int i=0, znak; 
    	FILE *plik = fopen("kolenda.txt", "r");
    	znak = fgetc(plik);
    
    	while (znak!=EOF)
    	{
    		erase(word);
    		i=0;
    		while(('A'<=znak && znak<='Z') || ('a'<=znak && znak<='z'))
    		{
    			
    			word[i]=znak;
    			znak=fgetc(plik);	
    			i++; cout<<i<<endl;
    		}
    
    		//program...
    
    		while ('A'>znak || (znak>'Z' && 'a'>znak) || znak>'z')
    		{
    			znak=fgetc(plik); 
    			if(znak==EOF) break;
    		}
    	}
    

Podsumowanie tematu

✨ Dyskusja dotyczy problemu czytania kolejnych znaków z pliku w języku C++ w kontekście projektu związanego z hashowaniem. Autor pyta, jak odczytywać pojedyncze znaki (nie całe wyrazy czy linie) oraz jak rozpoznać koniec pliku. W odpowiedziach zaproponowano użycie klasy ifstream z biblioteki fstream oraz metod takich jak open(), get(), good() i close(). Wskazano, że brak dołączenia odpowiednich nagłówków i przestrzeni nazw powoduje błędy kompilacji. Przykład kodu pokazuje otwarcie pliku, odczyt znak po znaku w pętli while sprawdzającej stan strumienia. W dalszej części autor samodzielnie rozwiązał problem, stosując funkcje standardowe języka C: fopen(), fgetc() i fclose(), implementując pętlę odczytującą znaki do momentu napotkania EOF, rozróżniając znaki literowe i końce wyrazów. Podkreślono znaczenie poprawnego zarządzania plikiem i obsługi końca pliku w pętli odczytu.
Wygenerowane przez model językowy.
REKLAMA