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. Mies vinkkinä sulle

      Jos pyytäisit kahville tai ihan mihin vaan, niin lähtisin varmasti välittämättä muista
      Ikävä
      99
      7823
    2. Oletko katkera kun

      Et saanut kaivattuasi
      Ikävä
      107
      5607
    3. Mitä haluat sanoa tällä hetkellä

      Hänelle 🫶 ⬇️
      Ikävä
      275
      4861
    4. Haluun sua niin paljon

      ❤️🥰🥹 Miehelle
      Ikävä
      49
      4823
    5. Vietetään yö yhdessä

      Rakastellaan koko yö
      Ikävä
      75
      3584
    6. Mitä palveluita mies..

      Haluaisit tilata minulta? -N
      Ikävä
      50
      2838
    7. Oletko tyytyväinen viime tapaamiseemme?

      Vai toivoitko sen menevän toisella tavalla? Miten?
      Ikävä
      62
      2564
    8. Olet oikeasti ollut

      Niin tärkeä mulle ja kaikki meidän väliltä on pilattu ei yksistään sinun toiminnalla vaan minun myös.
      Ikävä
      22
      2458
    9. Kuuluu raksutus tänne asti kun mietit

      Pelkäätkö että särjen sydämesi vai mikä on? En mä niin tekisi mies koskaan 😘
      Ikävä
      29
      2402
    10. Nyt se sit loppuu

      Et ei enää nähdä ja yhteyttä pidetä.
      Ikävä
      41
      2284
    Aihe