Ohjelman katkaiseminen escistä

Csharpnoviisi

Kuinka C#:lla tehdään konsoliohjelma, joka tulostaa luupissa "Moi!" toistuvasti kunnes käyttäjä painaa esciä? Eli siis tekisi tulostusta myös silloin kun mitään näppäintä ei paineta. Käytössä Linux Mint 19 ja bash.

8

228

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • do { while (! Console.KeyAvailable) { Console.WriteLine("Moi!"); } } while (Console.ReadKey(true).Key != ConsoleKey.Escape);

      • Niin ja tuo tietenkin tehdään C# ajoympäristöllä eikä vaikka bashilla.


      • zsdfgcguk

        Et vastannut kysymykseen.



    • Oikealla C-kielellä tuo onkin vähän monimutkaisempaa. Copy–paste-koodausta muutamalla muutoksella:

      ----
      #include <stdio.h>
      #include <termios.h>
      #include <unistd.h>
      #include <fcntl.h>
      #include <stdlib.h>
      #define ESC 27

      static void err_exit(const char *msg);

      int main(void)
      {
          int c;
          int oc = '\0';
          struct termios staryTermios, novyTermios;
          int oflags, nflags;

          if (tcgetattr(STDIN_FILENO, &staryTermios) != 0)
              err_exit("tcgetattr() failed");

          novyTermios = staryTermios;
          novyTermios.c_lflag &= ~(ICANON);
          if (tcsetattr(STDIN_FILENO, TCSANOW, &novyTermios) != 0)
              err_exit("tcsetattr() failed to set standard input");

          oflags = fcntl(STDIN_FILENO, F_GETFL);
          if (oflags < 0)
              err_exit("fcntl() F_GETFL failed");

          nflags = oflags;
          nflags |= O_NONBLOCK;
          if (fcntl(STDIN_FILENO, F_SETFL, nflags) == -1)
              err_exit("fcntl() F_SETFL failed");

          while ((c = getchar()) != ESC)
          {
          printf("Moi!\n");
          }

          if (tcsetattr(STDIN_FILENO, TCSANOW, &staryTermios) != 0)
              err_exit("tcsetattr() failed to reset standard input");

          putchar('\n');
          return 0;
      }

      static void err_exit(const char *msg)
      {
          fprintf(stderr, "%s\n", msg);
          exit(1);
      }

      • Ja rivit

        int c;
        int oc = '\0';

        voi poistaa ja muuttaa rivin

        while ((c = getchar()) != ESC)

        muotoon

        while ((getchar()) != ESC)

        Kopioimassa koodissa tulostettiin näppäimiltä painettuja merkkejä, ja siksi tarvittiin apumuuttujia.


    • yyfjtytf

      >>staryTermios, novyTermios;
      Oletko serbialainen?

    • rekursiivistaajatusta

      Is called recursive function calls, that go on and on untin some thing in logic stops.
      - Very usual in c-code, espesially in 3D-accelerator codes...

      Aika helppoa siis jos vain sen ymmärtää :D

    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Milloin olet viimeksi nähnyt

      Kaivattusi ja missä? Onko ikävä vastaa rehellisesti.
      Ikävä
      134
      2112
    2. Onpas punavihreät taas ärhäkkäinä

      😺 Ihan tuntuu kuin syyttäisitte meikäläisiä/meikäläistä Oulun puukotuksesta. Tapaus on hyvin ikävä ja tuomittava. En
      Luterilaisuus
      376
      1576
    3. Hauskaakin jopa...

      Että moni nainen olettaa, että kyse on vaan siitä kaanustinloukusta, kun mies jotain ehdottaa. 😄 Ja miettiikö monikaan
      Sinkut
      227
      1176
    4. Nainen, minkä kappaleen laittaisit nyt miehelle

      kuunneltavaksi tietäen, että hän ikävöi sinua ja kipuilee päästäkseen yhteyteen kanssasi. Jotain, joka kertoo...
      Ikävä
      109
      989
    5. Koen, että minua tavallaan vainotaan

      Kyllä minä vain satun tietämään, että täälläkin on joitain serkun kaiman kummeja jotka kiusaavat minua. Lisäksi sairas n
      Ikävä
      126
      979
    6. Toivottavasti vielä kohdataan mies

      Ja aloitetaan juttelu. Nyt olisin valmis.
      Ikävä
      92
      943
    7. Vanhemmalle naiselle

      Aikataulu muutos. Ensi viikolla pistetään asia vireille. Ei juhannukseen asti aikaa. Kannatti valehdella!
      Ikävä
      55
      928
    8. Pimahdan kohta ihan kunnolla

      Entä, jos otan sitten yhteyttä sinuun? 🫨🫥🥴
      Ikävä
      21
      920
    9. Herätänkö minä sinut itkullani nainen

      Kysyn tässä kun kaipuun aallot lyövät ylitseni ja ihmettelen missä olet toivoessani, että olisit tässä vierelläni. On va
      Ikävä
      25
      858
    10. Vastaa nyt kun kuitenkin valvot!

      Vai pelkäätkö että miehesi herää? Ppm:lle 😉
      Ikävä
      111
      808
    Aihe