Skocz do zawartości
obiboqs

[c++]szyfrowanie

Rekomendowane odpowiedzi

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...