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.
Ohjelman katkaiseminen escistä
8
275
Vastaukset
do { while (! Console.KeyAvailable) { Console.WriteLine("Moi!"); } } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
- zsdfgcguk
Et vastannut kysymykseen.
zsdfgcguk kirjoitti:
Et vastannut kysymykseen.
Vastasinhan: https://keskustelu.suomi24.fi/t/15392381/ohjelman-katkaiseminen-escista#comment-94866775
Tuo ohjelma tekee sen mitä pyydetään.
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
- 742892
- 642753
- 681812
- 241647
Tykkään susta
Elämäni loppuun asti. Olet niin suuresti siihen vaikuttanut. Tykkäsit tai et siitä171639- 201590
- 191478
- 481287
- 381263
Onko meillä
Molemmilla nyt hyvät fiilikset😢ei ainakaan mulla mutta eteenpäin on mentävä😏ikävä on, kait se helpottaa ajan myötä. Ko91249