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

230

    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. Moi vaan vielä kerran

      Kivaa päivää samalla. Kukaan ei kaipaa eikä rakasta. 💔🐺🌃🌧️☀️
      Ikävä
      324
      3416
    2. Nainen, millaisista miehistä tykkäät?

      Mielenkiinnosta kysyn 😄
      Ikävä
      213
      2842
    3. Nyt sitten ulos ihmiset!

      Älkää jumittako täällä. Menkää, näkykää ja hankkikaa kokemuksia. Ei teitä kukaan edes bongaile, jos önötätte täällä.
      Ikävä
      144
      2514
    4. Mitä jos saisit tietää että kaivatullasi

      on jo joku toinen?
      Ikävä
      109
      2035
    5. Onnea Solatie !

      On sit valittu uusi kaupunginjohtaja.No ei menny Nivala-Harju- Tapio -Pikkarainen juntan mukkaan.
      Kemijärvi
      18
      2029
    6. Naiselle varatulle

      Jos homma kariutuu kotona, niin saanko sinut ihan omakseni🙂??
      Tunteet
      10
      1716
    7. Minun pitää tehdä jotain

      En tiedä meneekö siihen viikko vai kuukausi. Mutta jos voit odottaa, niin löydän sinut sen jälkeen kun on homma hoidett
      Ikävä
      44
      1672
    8. Sarvisalon kesätori

      Onpa kiva paikka. Mutta torikahvila oli suorastaan naurettavan alkeellinen ja ne voileivät,olivat kuin pienen lapsen tek
      Loviisa
      17
      1578
    9. Sinä oot hyvä ihminen

      Mut ehkä me ei vaa sovita yhteen :(
      Ikävä
      122
      1296
    10. Hindulijat raivoavat täällä, ettei kristinuskossa

      ole itsessään mitään aitoa! No miksi sitten hyökkäilette "nollaa vastaan"? Eikö hnduilijan vaan kannattaisi pieht
      Hindulaisuus
      246
      1231
    Aihe