Program nie działa na linuxie.

0

Witam.

Może mi ktoś sprawdzić dlaczego mi ten kod nie działa pod linuxem? tzn. kompiluje się, ale gdy otwieram program to nic się nie dzieje. W win 7 działał bardzo dobrze.

#include <iostream> 
#include <ctime> 
#include <cstdlib> 
#include <string> 

using namespace std; 

class program_szyfrujacy 
{ 
  public: 
  int wylosowane[30]; 
  int dlugosc; 
  int gotowe_liczby[30]; 
  static string znaki; 
  static int liczby[33]; 
  string zaszyfrowane[20]; 
  string tekst; 
  int pozycje_znakow[30]; 
  float gotoweliczb[40]; 

  void menu() 
{ 
    cout <<"\t\t\t==========" << endl; 
    cout <<"\t\t\t||ENIGMA||" << endl; 
    cout <<"\t\t\t==========" << endl; 
    cout <<"\n\n" << endl; 
    cout <<"========================"<< endl; 
    cout <<"||1.Szyfrowanie       ||"<< endl; 
    cout <<"||2.Odszyfrowywanie   ||"<< endl; 
    cout <<"||0.Wyjscie           ||"<< endl; 
    cout <<"========================"<< endl; 
} 
int losowanie() 
{ 
  return (rand() % 31 ) + 1; 

} 
}; 

class odszyfrowywanie : public program_szyfrujacy 
{ 
  public: 
      int tab1[60]; 
      int tab2[60]; 
      string wpisztekst; 
      int sizetkst; 
      int tab3[60]; 
      string tab4[60]; 
}; 

int program_szyfrujacy::liczby[33]  = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31}; 
std::string program_szyfrujacy::znaki = "abcdefghijklmnoprstuwz-123456789"; 

int main() 
  { 
  srand( time( NULL ) ); 
   int opcja; 
  while(opcja !=0) 
  { 
  program_szyfrujacy enigma; 
  enigma.menu(); 
  cin >> opcja; 
  cin.ignore(); 
  switch (opcja) 
  { 
      case 1: 
      { 

         cout << "Podaj tekst do zaszyfrowania. Zamiast spacji uzyj znaku '-':  "; 
         getline (cin,enigma.tekst); 
         enigma.dlugosc = enigma.tekst.length(); 
         cout << "\a"; 
         cout << "\n"; 
         cout << "Twoj unikalny kod: Uwaga kod bedzie Ci potrzebny do odszyfrowania wiadomosci!!!   " << endl; 
         cout <<"\nUnikalny kod: "; 
         for (int i = 0; i < enigma.dlugosc; i++) 
         { 
             enigma.wylosowane[i] = enigma.losowanie(); 
             cout << enigma.wylosowane[i] << " "; 
         } 
         for (int i = 0; i < enigma.dlugosc; i++) 
         { 
         std::string strznak(enigma.tekst,i,1); 
         size_t pozycja = enigma.znaki.find (strznak); 
         enigma.pozycje_znakow[i] = pozycja; 
         } 
         for (int i = 0;i < enigma.dlugosc; i++) 
         { 
            enigma.gotowe_liczby[i] = (enigma.pozycje_znakow[i] + enigma.wylosowane[i])%31; 
         } 
         cout << "\n" << endl; 
         cout << "Twoj szyfr to: "; 
         for (int i = 0; i < enigma.dlugosc; i++) 
         { 
             std::string strznak2(enigma.znaki,enigma.gotowe_liczby[i],1); 
             enigma.zaszyfrowane[i] = strznak2; 
             cout << enigma.zaszyfrowane[i]; 
         } 
         cout << "\n\n"; 
         int klawisz; 
         cout << "\nWcisnij klawisz 1 aby kontynuowac:"; 
         cin >> klawisz; 
         if (klawisz == 1) 
         { 
             system ("cls"); 
         } 
         break; 

      } 

      case 2: 
        { 
            odszyfrowywanie obiekt; 
            cout << "\nPodaj szyfr:  "; 
            cin >> obiekt.wpisztekst; 
            obiekt.sizetkst = obiekt.wpisztekst.length(); 

            for (int i =0; i < obiekt.sizetkst; i++) 
            { 
            std::string strznak2(obiekt.wpisztekst,i,1); 
            size_t pozycja = obiekt.znaki.find (strznak2); 
            obiekt.tab1[i] = pozycja; 
            } 
            cout << "\n"; 
            cout << "Wpisz unikalny kod:" << endl; 

            for (int i = 0; i < obiekt.sizetkst; i++) 
            { 
              cin >> obiekt.tab2[i]; 
            } 

            int x; 

            for (int i = 0; i < obiekt.sizetkst; i++) 
            { 
                x = obiekt.tab1[i] - obiekt.tab2[i]; 
                if (x < 0) 
                { 
                    x  = x + 31; 
                } 

                obiekt.tab3[i] = x; 
            } 
            cout << "\nWiadomosc:  "; 
            for (int i = 0; i < obiekt.sizetkst; i++) 
            { 
               std::string strznak3(obiekt.znaki,obiekt.tab3[i],1); 
               obiekt.tab4[i] = strznak3; 
               std::cout << obiekt.tab4[i]; 
            } 
        } 
        break; 
   } 
  } 
  }
0

Jest okey - u mnie się skompilował i uruchomił.

gcc /sciezka/do/kodu.cpp -o ~/mojprogram
~/mojprogram
0

No to dziwne. U mnie kompilacja wygląda tak: g++ plik.cpp -o plik i uruchamiam ./plik oczywiście wszystko w katalogu w którym są pliki...

Jeśli użyję gcc to wywala masę błędów...

1

Być może u ciebie jak i u mnie w code:blocks "wyzerowało" zmienną opcja (przez co program kończył się bez wyświetlenia czegokolwiek), zmień deklarację na int opcja = 1; i powinno być dobrze.

0

WoW faktycznie działa!! Dzięki nigdy bym nie pomyślał o tym że to może być przez to....

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