Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zadanie domowe lekcja 32 błąd

Ostatnio zmodyfikowano 2014-12-31 22:49
Autor Wiadomość
dafuck17
Temat założony przez niniejszego użytkownika
zadanie domowe lekcja 32 błąd
» 2014-12-31 03:10:46
C/C++
//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.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void odczytiWypisz( string wprowadzonyWyraz, string tekst, string wiersz )
{
    ifstream plik; //to pracy z plikiem
    plik.open( "D:\\plik.txt" ); //otwiera plik znajdujacy sie w wybranej sciezce
    if( plik.good() ) //jesli znalazl
    {
        cout << "Udalo sie otworzyc plik" << endl;
    }
    else
    {
        cout << "Nie udalo sie otworzyc pliku" << endl;
    } //else
   
    getline( plik, tekst );
   
    cout << "Wprowadz szukany wyraz : " << endl;
    getline( cin, wprowadzonyWyraz );
   
    size_t znalezionaPozycja = tekst.find( wprowadzonyWyraz );
   
    if( znalezionaPozycja != string::npos )
         cout << "znaleziono wyraz w linijkach:" << endl;
    else
         cout << "Nie znaleziono wyrazu" << endl;
   
    while( getline( tekst, wiersz ) )
    {
        if( znalezionaPozycja != string::npos )
             cout << wiersz << endl;
       
    }
   
    plik.close();
   
}


int main()
{
   
    string wyraz;
    string tekst;
    string wiersz;
    odczytiWypisz( wyraz, tekst, wiersz );
   
    return 0;
}
 Błąd jest przy:
while( getline( tekst, wiersz ) )
, a treść jest nastepująca:
"C:\Users\admin\Desktop\Dokumenty\c++\c++\zadaniedomowe p4l32.cpp:32:33: error: no matching function for call to 'getline(std::string&, std::string&)'"
obydwa argumenty to stringi, dołączyłem bblioteke <string> takze o co chodzi? :/
P-123723
lectre
» 2014-12-31 11:43:39
Getline przyjmuje takie argumenty (strumień, string).
Czyli wywołuj to w taki sposob getline(cin, nazwa_stringa);
P-123727
dawiolp16
» 2014-12-31 14:07:37
Tak powinien wyglądać działający kod.
C/C++
//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.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void odczytiWypisz()
{
    ifstream plik;
    plik.open( "D:\\plik.txt" );
   
    //Sprawdzam czy udalo sie otworzyc plik
    if( !plik.good() )
    {
        cout << "Nie udalo sie otworzyc pliku!" << endl;
        return;
    }
   
    cout << "Udalo sie otworzyc plik!" << endl;
   
    string wprowadzonyWyraz;
   
    //Pobieram od uzytkownika szukany wyraz
    cout << "Wprowadz szukany wyraz: ";
    getline( cin, wprowadzonyWyraz );
   
    string fLine;
   
    //Wczytuje pokolei linijke tekstu z pliku
    while( getline( plik, fLine ) )
    {
       
       
        size_t znalezionaPozycja = fLine.find( wprowadzonyWyraz );
       
        //Sprawdzam czy znalazlem wyraz w linijce
        if( znalezionaPozycja != string::npos )
             cout << fLine << endl;
       
    }
   
    return;
}

int main()
{
   
    odczytiWypisz();
   
    return 0;
}
Nie obraź się, ale twój kod jest totalnie bezsensu.
Przeanalizuj go i popraw swoje błędy :P
P-123734
Rashmistrz
» 2014-12-31 16:59:01
@dawiolp16
Jak śmiesz mówić o tym bezsens
nie wskazując miejsca...

zupełnie jak kompilator
bez wskazywania błędów...


e tam... przesadzam :P
ale nie powinieneś podawać gotowca
__________________________________________

Ołoło łoło ło! Teraz moja kolej...

Co do błędu...
To jest tak jak mówi Lectre.

» Kurs C++ » Poziom 3Wczytywanie tekstu - standardowy strumień wejścia lekcja:
"Wczytywanie tekstu - std::getline"
__________________________________________

C/C++
else
{
    cout << "Nie udalo sie otworzyc pliku" << endl;
}

Powinieneś zamknąć program w tym przypadku.

Możesz to zrobić tak jak kolega Ci podał:
C/C++
if( !plik.good() )
{
    cout << "Nie udalo sie otworzyc pliku!" << endl;
    return 0;
}
cout << "Udalo sie otworzyc plik!" << endl;

__________________________________________

size_t znalezionaPozycja = tekst.find( wprowadzonyWyraz );
C/C++
while( getline( cin, wiersz ) )
{
    if( znalezionaPozycja != string::npos )
         cout << wiersz << endl;
   
}

[...]wypisze na ekranie tylko te wiersze,
w których znajduje się wyraz
wprowadzony przez użytkownika.
a w tym przypadku wypisze wszystko,
albo nic, zależnie od tego czy będzie
się znajdował szukany wyraz w pierwszej linijce...
__________________________________________
 
C/C++
if( znalezionaPozycja != string::npos )
     cout << "znaleziono wyraz w linijkach:" << endl;
else
     cout << "Nie znaleziono wyrazu" << endl;

W takiej postaci ten fragment kodu jest zbędny...
__________________________________________

Zalecam napisanie tego jeszcze raz, by nie mącić za bardzo.


@dawiolp16
C/C++
int main()
{
    odczytiWypisz();
    return 0;
}

Yhmmmm?!
P-123751
dafuck17
Temat założony przez niniejszego użytkownika
» 2014-12-31 22:49:24
Przeanalizowałem wszystko... Kod pisałem ok. 3 w nocy i chyba dosyć dużo namieszałem :D Dzięki wielkie :)
P-123772
« 1 »
  Strona 1 z 1