obiboqs Opublikowano 19 Listopada 2008 Zgłoś Opublikowano 19 Listopada 2008 Witam serdecznie. Mam problem z programem. Otóż wygląda on następująco: #include <iostream>using namespace std;main(){ int n; cout << "Podaj klucz (wartosc szyfrowania): "; cin >> n; char tab[256]; cout << "Wprowadz dane do tabeli: "; cin.getline (tab,256); char tab1[256]; for(int i=0;i<256;i++) { tab1[i] = (char)((int)tab[i]+n); cout << tab1[i]; } cout << endl; for(int k=0;k<256;k++) { tab[k] = (char)((int)tab1[k]-n); cout << tab[k]; } getchar(); cin.ignore();Problem objawia się w tym, że po skompilowaniu (zarówno pod Linuksowym GCC jak i pod Windowsowym DEV'em) w ogóle nie chce zadziałać funkcja cin.getline. Czy może mi ktoś wyjaśnić na czym polega błąd w tym programie, dlaczego tak się dzieje..? Niepoprawna składnia? Brak jakieś biblioteki? Bo ja już nie wiem.. Dalsza część programu jeszcze może mieć bugi - to wiem, ale żeby te ewentualne bugi poprawić (jeżeli występują) muszę najpierw uporać się z tą funkcją cin.getline. Czy istnieje jakieś logiczne wytłumaczenie tego, że program zamiast pobrać z klawiatury ciąg znaków, program przechodzi do następnego etapu zupełnie ten krok pomijając? Bo z tego co widzę i składnia jest poprawna, i bibliotek żadnych dodatkowych nie trzeba - ściągnąłem taki przykładowy, prosty program oparty o tą funkcję, wszystko wykonane jest analogicznie - ale ten działa: // istream getline#include <iostream>using namespace std;int main () { char name[256], title[256]; cout << "Enter your name: "; cin.getline (name,256); cout << "Enter your favourite movie: "; cin.getline (title,256); cout << name << "'s favourite movie is " << title; getchar(); cin.ignore();}Tak więc teraz już zgłupiałem - nie wiem o co może chodzić. Nie patrzcie na to że program wyrzuca szlaczki - bowiem ma on za zadanie szyfrować dane w tabeli przy wykorzystaniu kodów ASCII - a że tabela nie jest wypełniona (a jak wiadomo jeżeli tabela po zadeklarowaniu nie jest wypełniona, to nie jest ona pusta a znajdują się w niej jakieś dziwne wartości) to właśnie później z tego takie szlaczki wychodzą. Co może być nie tak..? Ewentualnie - jaką inną funkcją można (w ostateczności) zastąpić tę funkcję? Z góry dzięki za wszystkie odpowiedzi. Pozdrawiam Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Thomas Opublikowano 19 Listopada 2008 Zgłoś Opublikowano 19 Listopada 2008 Spróbuj wpisać po cin >> n;//jeszcze dodatkowocin.ignore(); , żeby usunąć ze strumienia wejściowego dodatkowy 'enter' który wszystko kaszani; wyskakuje Ci potem ten enter przy drugim cin i od razu masz wczytanie pustych danych, zamiast samemu dawać enter. Zawsze jak robisz cin>> cos (w ogóle strumień>> cos; to daj strumien.ignore() tak dla świętego spokoju.) Przy getline i getchar jest ten cin.ignore() chyba niepotrzebny Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
obiboqs Opublikowano 21 Listopada 2008 Zgłoś Opublikowano 21 Listopada 2008 Aa, to o to chodziło :) Nie wpadłbym na to. Oczywiście wszystko teraz działa jak należy (po dodaniu cin.ignore po cin >> n i odpluskwieniu) Wielkie dzięki Temat do zamknięcia Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...