Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Miten tehdään ncurses ohjelma, jonka suoritus loppuu tietystä napista?

Jaska [27.03.2017 21:40:57]

#

Kokeilin muokata Piinkovan salasanan laskuohjelmaa siten, että se koettaisi murtaa MD5-hashia niin kauan kunnes käyttäjä painaa vaikkapa nuolta vasemmalle. Koetin googlata ohjeita, mutta jostain syystä tekeleeni ei toimikaan. Tai alunperin mietin, että esc voisi lopettaa ohjelman, mutta sitä ei suositeltu, https://www.gnu.org/software/guile-ncurses/manual/html_node/Getting-characters-from-the-keyboard.html. Mutta miksi seuraava ohjelma ei pysähdy vaikka painan nuolta vasemmalle? Mulla on tuo md5-funktio toisessa tiedostossa, ja se toimii kunnolla.

#include <ctime>
#include <curses.h>
#include <iostream>
#include <string>
#include "md5.h"

using namespace std;

static const char alphanum[] = "abcdefghijklmnopqrstuvwxyz";

int slen = sizeof(alphanum) - 1;

char genrandom() {
    return alphanum[rand() % slen];
}

int main() {
   int ch;
   time_t now = time(0);
   char* dt = ctime(&now);
   string SS = "";     // C++ STL string
   cout << "Ohjelman suoritus alkoi " << dt << endl;
   srand(time(0));
   int k = 10;  // Length of the correct digits
   while(1) {
       for(unsigned int i = 0; i < 74; ++i) {
           SS += genrandom();
       }
       if(md5(SS).substr(0,k) == "3141592653") {
           cout << k << ": " << SS << endl;
       }
       SS = "";
       ch = getch();
       if(ch == KEY_LEFT)
           exit(0);
   }
   return EXIT_FAILURE;
}

Metabolix [27.03.2017 21:49:36]

#

Curses-tilaan päästäksesi sinun täytyy kutsua alustusfunktiota: initscr(). Lopussa olisi hyvä kutsua vastaavasti lopetusfunktiota: endwin(). Täällä on myös opas.

Silmukan lopetukseen break olisi mielestäni tässä tilanteessa selvempi kuin exit.

Jaska [27.03.2017 22:09:22]

#

Hmm. En saanut toimimaan.

#include <ctime>
#include <curses.h>
#include <iostream>
#include <string>
#include "md5.h"

using namespace std;

static const char alphanum[] = "abcdefghijklmnopqrstuvwxyz";

int slen = sizeof(alphanum) - 1;

char genrandom() {
    return alphanum[rand() % slen];
}

int main() {
   int ch;
   time_t now = time(0);
   char* dt = ctime(&now);
   string SS = "";     // C++ STL string
   cout << "Ohjelman suoritus alkoi " << dt << endl;
   srand(time(0));
   initscr();
   int k = 10;  // Length of the correct digits
   while(1) {
       for(unsigned int i = 0; i < 74; ++i) {      // Takes forever
           SS += genrandom();
       }
       if(md5(SS).substr(0,k) == "3141592653") {
         cout << k << ": " << SS << endl;
       }
       SS = "";
       ch = getch();
       if(ch == KEY_LEFT)
           break;
   }
   endwin();
   return EXIT_FAILURE;
}

Metabolix [28.03.2017 17:35:47]

#

Kokeilepa hakea curses-oppaasta vaikka sanaa ”nuolinäppäin”, jospa sieltä löytyisi apua...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta