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

277

    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. Oletko tyytyväinen viime tapaamiseemme?

      Vai toivoitko sen menevän toisella tavalla? Miten?
      Ikävä
      72
      3053
    2. Nyt se sit loppuu

      Et ei enää nähdä ja yhteyttä pidetä.
      Ikävä
      55
      2705
    3. Kuoleman pelko katosi

      Olen pelännyt koko elämän ajan kuolemaa mutta yhtäkkiä kun hindut paljastivat totuuksia uskonnoista noin aloin yhtäkkiä
      Hindulaisuus
      432
      2315
    4. Viikonloppu terveiset kaivatulle

      tähän alas ⬇️⬇️⬇️
      Ikävä
      79
      2178
    5. Jos sitä keittelis teetä

      Ja miettis mitä mies siellä jossain touhuilee... ☕️
      Ikävä
      95
      1996
    6. Myötähäpeä kun näkee sut,

      tekisit jotain ittelles. Ihan hyvällä tämä!
      Ikävä
      52
      1875
    7. Huomenta ........

      Huomenta 💗 Tiedän, että tuntuisit hyvälle.
      Ikävä
      12
      1576
    8. Kuhmolainen on selvästi kepun lehti

      Kuhmolaise etukannessa oli Kuva kun Jaskalle annettiin karhu patsas.mutta kukmolaislehti oli niin kepulainen että Jaskan
      Kuhmo
      17
      1527
    9. Ei mun tunteet

      ole mihinkään kadonnut. Enkä mä sua inhoa tai ole kyllästynyt. Mä ymmärsin, ettet ole kiinnostunut minusta, ainakaan sil
      Ikävä
      30
      1370
    10. Mitä nämä palautteet palstalla ovat?

      Joku uusi toimintatapa rohkaista kirjoittajia vai mistä on kyse?
      Ikävä
      29
      1339
    Aihe