C4800 - co zwraca getline?

0

Witam,
Przy kompilacji wyskakuje mi błąd:
*warning C4800: 'void ' : forcing value to bool 'true' or 'false' (performance warning)

for(bool bWczytano = getline(obiekt, tekst); bWczytano; bWczytano = getline(obiekt, tekst))

o co moze chodzić? czyżby getline zwracało jakąs inna wartość niż flagi true/false?

1
  1. które getline?
  2. bool to nie to samo co BOOL, a true/false to nie to samo co TRUE/FALSE.
  3. jeśli chcesz inta rzutować na boola bez tego warninga, użyj operatora !!:
bool b = !!jakis_int;
  1. albo dodaj warunek:
bool b = (jakis_int != 0);
0

Wygląda na to że getline() którego używasz zwraca void* czyli to nie jest żaden ze standardowych.

0
#include <iostream>
#include <Windows.h>
#include <fstream>
#include <string>

//Napisz program, który odczyta zawartość pliku, a następnie wypisze na ekranie tylko te wiersze, w których znajduje się wyraz wprowadzony przez użytkownika.

using namespace std;

bool odczyt_pliku(string nazwa_pliku, ifstream obiekt){
    obiekt.open(nazwa_pliku.c_str());
    if(obiekt.good())
        return true;
    else 
        return false;
}

bool szukaj_pozycji_wyrazu (string wyraz, string tekst){                                // okresla, czy wyraz podany przez usera jest w tekscie
    
    size_t znaleziona_pozycja = tekst.find(wyraz);
    if(znaleziona_pozycja == string::npos) return false;  
    else return true;
}


int main(){
    string tekst;
    string wyraz;
    ifstream obiekt;
    if(odczyt_pliku("dokument_tekstowy.txt", obiekt)){
        cout << "podaj wyraz do odczytania sensu zdania: " << endl;
        cin >> wyraz;
        for(bool bWczytano = getline(obiekt, tekst); bWczytano; bWczytano = getline(obiekt, tekst)){
            if(szukaj_pozycji_wyrazu(wyraz, tekst))
                cout << tekst << endl;
            else continue;

        }
        obiekt.close();
    }
    else
    cout << "Nie udalo sie otworzyc pliku";
    system("PAUSE");
    return 0;
}

kod raczej roboczy, wymaga troche poprawek w samym funkcjonowaniu. Przy kompillacji błąd 4800, więc na chwile obecną zgłupiałem..

2

bool odczyt_pliku(string nazwa_pliku, ifstream &obiekt) - jednego znaku brakuje

A tak naprawdę potrzebujesz tylko tyle:

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

int main()
  {
   string tekst,wyraz;
   ifstream obiekt("dokument_tekstowy.txt");
   if(obiekt)
     {
      cout<<"podaj wyraz do odczytania sensu zdania: "<<endl;
      cin>>wyraz;
      while(getline(obiekt,tekst)) if(tekst.find(wyraz)!=string::npos) cout<<tekst<<endl;
     }
   else cout<<"Nie udalo sie otworzyc pliku"<<endl;
   //while(cin.get()!='\n'){} cin.get(); // to IDE powinno załatwić.
   return 0;
  }
0

Dzieki wielkie :) Siedzi człowiek jak głupi póltorej godziny i nie wie co źle zrobił...

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