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

246

    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. Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta

      https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi
      Kotka
      94
      2410
    2. Olen tosi outo....

      Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap
      Ikävä
      21
      2300
    3. Vanhalle ukon rähjälle

      Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen
      Ikävä
      19
      1898
    4. Maisa on SALAKUVATTU huumepoliisinsa kanssa!

      https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663
      Kotimaiset julkkisjuorut
      77
      1532
    5. Oletko sä luovuttanut

      Mun suhteeni
      Ikävä
      106
      1497
    6. Hommaatko kinkkua jouluksi?

      Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k
      Sinkut
      161
      1258
    7. Aatteleppa ite!

      Jos ei oltaisikaan nyt NATOssa, olisimme puolueettomana sivustakatsojia ja elelisimme tyytyväisenä rauhassa maassamme.
      Maailman menoa
      257
      1062
    8. Mitä sanoisit

      Ihastukselle, jos näkisitte?
      Tunteet
      70
      981
    9. Onko se ikä

      Alkanut haitata?
      Ikävä
      78
      929
    10. Omalääkäri hallituksen utopia?

      Suurissa kaupungeissa ja etelässä moinen onnistunee. Suuressa osassa Suomea on taas paljon keikkalääkäreitä. Mitenkäs ha
      Maailman menoa
      174
      903
    Aihe