CTRL85 Temat założony przez niniejszego użytkownika |
» 2011-06-03 17:35:02 kod:
#include <iostream> #include <string> #include <conio.h> #include <fstream> using namespace std; struct baza { string odpowiedz; string pytanie; };
int main() { while( 1 ) { struct baza dane; string zmienna; string odczyt; cout << "->"; getline( cin, zmienna ); dane.pytanie = zmienna; fstream plik; plik.open( "baza.txt" ); while( getline( plik, odczyt ) ) { dane.odpowiedz = odczyt; } cout << dane.odpowiedz << endl; } }
umieściłem na klej.org, bo zazwyczaj za wklejenie kodu bezpoś. do posta móna dostać warna :) |
|
Mrowqa |
» 2011-06-03 17:44:16 Kod otaguj [cpp][/cpp] fstream plik; plik.open( "baza.txt" ); while( getline( plik, odczyt ) ) { dane.odpowiedz = odczyt; } cout << dane.odpowiedz << endl;
Tyle na pierwszy rzut oka :) Zmienne definiowane w pętli z każdym jej obiegiem są niszczone, a potem tworzone od nowa inne obiekty !! ( w sensie podczas kolejnego obiegu pętli ) Pozdrawiam, Mrowqa |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2011-06-03 18:29:21 Nadal odpowiada ostatnią linijką :( |
|
Mrowqa |
» 2011-06-03 19:15:53 No to czego się spodziewałeś ?? while( getline( plik, odczyt ) ) { dane.odpowiedz = odczyt; } cout << dane.odpowiedz << endl;
Szkoda słów na ten temat ... Możesz sobie zapisywać do dynamicznie zaalokowanej tablicy stringów i losowy wypisać, albo np. przerobić tak zapis: if( rand % 10 < 3 ) dane.odpowiedz = odczyt;
if( dane.odpowiedz.empty() ) dane.odpowiedz = "twoja awaryjna odpowiedz :P";
Oczywiście ta szansa to 30$ na ostatnią, więc jeśli masz np. 100 odpowiedzi więc lepszy były np. 2% :D Pozdrawiam, Mrowqa |
|
absflg |
» 2011-06-03 23:47:08 Twój program pobiera pytanie od użytkownika, wypisuje '->' po czym wkleja ostatni wiersz pliku (zapisuje każdy wiersz w dane.odpowiedz, więc po wykonaniu pętli będzie w nim ostatnia wartość). Jak chcesz, żeby wklejało odpowiednią odpowiedź to napisz, żeby to robiło. Żadna magia tu nie zadziała.
Dostałeś na prośbę o pomoc dwa warianty wykonania, których nie wykorzystałeś. Po co trwonisz cudzy czas? :] |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2011-06-04 19:49:21 #include <iostream> #include <string> #include <conio.h> #include <fstream> using namespace std; struct baza { string odpowiedz; string pytanie; }; int main() { srand(( int ) time( NULL ) ); while( 1 ) { fstream plik; plik.open( "baza.txt" ); struct baza dane; string zmienna = " "; string odczyt = " "; cout << "->"; getline( cin, zmienna ); dane.pytanie = zmienna; while( getline( plik, odczyt ) ) { if( odczyt == dane.pytanie ) { getline( plik, odczyt ); cout << odczyt << endl; } } if( dane.odpowiedz.empty() ) { dane.odpowiedz = "Niestety nie wiem o co Ci chodzi"; } plik.close(); } }
Mam takie coś i (o dziwo) działa, ale ma 2 poważne mankamenty: 1. może być 1 słowo w jednej linijce (jedna odpowiedz, jedno pytanie) 2. Jeżli nie znalazło w bazie to po prostu nic nie odpowiada - przydała by się informacja Ale mimo tego ciesze sie ze coś wykombinowałem :D No i jeszcze pokombinuje, żeby dało sie po kilka odpowiedzi i pytań w linijce. |
|
Mrowqa |
» 2011-06-04 20:24:11 2. Jeżli nie znalazło w bazie to po prostu nic nie odpowiada - przydała by się informacja |
if( dane.odpowiedz.empty() ) { dane.odpowiedz = "Niestety nie wiem o co Ci chodzi"; }
To wyżej masz :) Jak wcześniej mówiłem - polecam zdefiniować obiekty przed pętla ( i jak chcesz to tam otworzyć plik, a za pętlą zamknąć :D ). Pozdrawiam, Mrowqa |
|
CTRL85 Temat założony przez niniejszego użytkownika |
» 2011-06-04 20:51:26 Tylko jak jest tak: #include <iostream> #include <string> #include <conio.h> #include <fstream> using namespace std; struct baza { string odpowiedz; string pytanie; }; int main() { fstream plik; plik.open( "baza.txt" ); while( 1 ) { struct baza dane; string zmienna = " "; string odczyt = " "; cout << "->"; getline( cin, zmienna ); dane.pytanie = zmienna; while( getline( plik, odczyt ) ) { if( odczyt == dane.pytanie ) { getline( plik, odczyt ); cout << odczyt << endl; } } if( dane.odpowiedz.empty() ) { dane.odpowiedz = "Niestety nie wiem o co Ci chodzi"; } } plik.close(); }
To źle wyszukuje, bo (załóżmy, że w pliku jest: czesc siema nara papa) To jak wpisze czesc - wszystko ok, jak wpisze nara - ok, ale jeśli jeszcze raz wpisze "czesc" to już nie czyta :/ Definiowanie zmiennych - o coś takiego chodziło? #include <iostream> #include <string> #include <conio.h> #include <fstream> using namespace std; struct baza { string odpowiedz; string pytanie; }; int main() { string zmienna = " "; string odczyt = " "; while( 1 ) { fstream plik; plik.open( "baza.txt" ); struct baza dane; cout << "->"; getline( cin, zmienna ); dane.pytanie = zmienna; while( getline( plik, odczyt ) ) { if( odczyt == dane.pytanie ) { getline( plik, odczyt ); cout << odczyt << endl; } } plik.close(); } }
|
|
1 2 « 3 » 4 |