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

342

    Vastaukset 8

    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. Pyhäjärvi syvällä kusessa

      Pyhäjärvi ei tule selviämään millään tästä alhosta. Ollaan aivan liian syvällä. https://www.mtvuutiset.fi/artikkeli/pyha
      Pyhäjärvi
      138
      1530
    2. Oivallus

      Mitä olet oivaltanut viimeksi?
      Ikävä
      148
      1081
    3. Miten voi sinun

      tunteet yhtäkkiä kuolla kuin napista painamalla? Et enää vilkaisekaan minuun päin vaan jos vahingossa näet minut käännät
      Ikävä
      69
      936
    4. Miksi naiset haluavat itseään vanhemman kumppanin? Vai haluavatko?

      Tuolla toisessa ketjussa tuli esille tämä kysymys ja se on mielestäni hyvä kysymys. Kiitos scrg:lle tämän kysymyksen esi
      Sinkut
      276
      776
    5. 68
      733
    6. PYHÄJÄRVEN KAUPUNKI VALTIOVARAINMINESTERIÖN ARVIOINTIMENETTELYYN..TE

      ...siinä se nyt on, mitä tässä enää vikistään. Uutiset Yle, 14.8. Klo 20.30, ei tunnu mukavalta.
      Pyhäjärvi
      56
      723
    7. Rakastan sinua mies

      Siksi haluankin vain sinun kanssa sitä.
      Ikävä
      37
      619
    8. Ernest Lawson rehellisenä vaikeasta TTK-tilanteesta: "Vain harvan ja valitun henkilön tiedossa"

      Tanssii Tähtien Kanssa tulee syksyn iloksi ja tiedossa on suosikkisarjan 19. kausi. Tulevalla kaudella nähdään iso uudi
      Tanssii tähtien kanssa
      7
      581
    9. Väleistä

      Minkälaiset välit sinulla on kaivattusi kanssa?
      Ikävä
      60
      567
    10. Missä vaiheessa

      Unohdit minut? Onko sinulla oikeasti mies jota rakastat? Tiedän että möhlin ja odotin liikaa. Ei tarvitse vastata jos et
      Ikävä
      33
      561
    Aihe