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

293

    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. Mieleni harhailee sinussa

      Uskon että tykkäät minusta. On vain yksi elämä. Silti jään paikoilleni ja odotan että jokin muuttuu. Menin palasiksi, ei
      Tunteet
      18
      4721
    2. Jännitän sinua J mies

      Ei tästä tulee mitään. Tuskin kaikki olis mennyt näin moneen solmuun, jos olis tarkoitettu meidät yhteen.
      Ikävä
      127
      1535
    3. Toivotko, että

      hän tulisi juttelemaan sinulle, vai lähestytkö mieluummin itse?
      Ikävä
      101
      1430
    4. Kuinka kauan kesti että ihastuit

      Kaivattuusi? Jos lasketaan siitä hetkestä alkaen kun näit hänet ensi kerran. Oliko jokin tilanne tai tapahtuma, joka voi
      Ikävä
      67
      1323
    5. Orpo suunnittelee palestiinalaislasten Suomeen siirtoa

      "Sairaalahoitoa tarvitsevien lasten ottaminen Suomeen on lisäksi selvityksessä, Orpo sanoo. – Jos meillä on mahdolli
      Maailman menoa
      326
      1289
    6. Taposta murhaksi

      Mitä tästä tapauksesta tiedetään?
      Kajaani
      48
      1256
    7. Olen käyttäytynyt sinua kohtaan väärin toistuvasti

      Puolustuksekseni täytyy sanoa, että ei ole ollut tahallista vaan seurausta harhaisista luuloista ja ajatuksista. Esimerk
      Ikävä
      72
      1170
    8. Tunneälyä testaamaan!

      Testi pitää sisällään viisi osa-aluetta. Itse sain täydet tuosta ensimmäisestä eli 25/25. Kokonaispistemäärä oli 100/125
      Lesbot
      3
      991
    9. Vaikutat tosi mielenkiintoiselta ja

      paksulta. 😂 m - n
      Ikävä
      86
      925
    10. Saanko mies tulla sun kainaloon nukkumaan?

      En saa unta kun mietin sua❤️ Saako tulla sun viereen ja käpertyä sun kainaloon?
      Ikävä
      49
      894
    Aihe