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ä
Csharpnoviisi
8345
0Äänestä
Muut lukivat myös
Ketjusta on poistettu 1 sääntöjenvastainen viesti.
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 8
Vanhimmat
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.
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.
>>staryTermios, novyTermios;
Oletko serbialainen?
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