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

258

    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. voitaisiinko unohtaa se sotku?

      Olisiko mahdollista aloittaa puhtaalta pöydältä vielä? Ikävä sua ****
      Ikävä
      73
      5041
    2. Oisko se tosi paha

      Jos haluaisinkin susta ennen kaikkea seksiä? Nainen
      Ikävä
      132
      3497
    3. Huomenta ja hyvää tiistaita

      Huomenta ja hyvää tiistaita. ❄️🐺☕❄️
      Ikävä
      98
      2295
    4. Milloin nainen saan sinut?

      Kanssani eroottisiin hetkiin? Tiedät ja tunnet kovan haluni, hellyyden myös. Onko vastauksesi edelleen, että en tiedä, e
      Ikävä
      20
      1915
    5. Ovatko persut tehneet jo päätöksen ulkopolitiikastaan?

      Persujen olisi hallituspuolueena syytä tehdä jo päätöksiä siitä, aikovatko he olla pro-Ukraina vai pro-Trump eli pro-Put
      Perussuomalaiset
      228
      1713
    6. Haluan että tiedät tämän

      Jos luet täällä. En ole sinulle vihainen, vaikka asiat menivät niinkuin menivät. Ajattelin, että et tykkää minusta, jonk
      Ikävä
      85
      1517
    7. Jee! Palsta toimii jälleen!

      Viestiarkisto näkyy ja kaikki pelittää. Tätä on odotettu, vaikka ei tässä mitään odotettavaa ole ollut.
      Sinkut
      25
      1387
    8. A, teksteistäni löydät itsesi

      jos luet tarkkaan. Vain epäsuorasti voin tunteeni myöntää, en halua minkään rikki menevän. Kaipaan sinua ja odotan näkem
      Ikävä
      26
      1357
    9. Mitä olen antanut sinulle?

      Mitä olet antanut minulle?
      Suhteet
      37
      1326
    10. Oletko sinä lähellä?

      Tutkassani väräjää siihen malliin, pitääkö poistua mestoilta?
      Ikävä
      14
      1249
    Aihe