Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelma vain välähtää

Sivun loppuun

Rumilus [26.11.2005 14:02:40]

#

OOn vasta aloittelija mutta osaan jo tehdä jotakin mutta ongelma mulla on tässä ------>Mulla on ongelma johon tarviin apua eli kun teen ohjelman devc++ niin se vilkahtaa ruudulla nanosekuntin. Eli mihin mun täytyis pistää joku stop, pause juttu että tarvii painaa nappia ennen ku se välähtää pois ruudulta.

zacura [26.11.2005 14:17:26]

#

http://pp.kpnet.fi/blaze/codefaq/#justflashes

jgz [26.11.2005 17:35:46]

#

Kun opettelin c:tä minua ärsytti tuo, että aina piti avata se komentorivi. Ongelman voi ratkaista esimerkiksi näin:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
 printf("Hello world!");
 system("PAUSE");
 return 0;
}

Meitsi [26.11.2005 17:39:02]

#

Ei näin. System-pause taktiikka on todellinen purkka. Toimii vain windowsissa yms. muutenkin huono. Lukekaas jostakin cin.get:istä.

viznut [26.11.2005 17:43:02]

#

getchar(); on lyhyempi kirjoittaakin kuin jokin system("PAUSE"); -purkka. Käsittämätöntä, miten ihmiset jaksavat vuosikausia neuvoa toisilleen samaa virhettä.

viznut [26.11.2005 17:49:55]

#

Ja mainittakoon vielä, että myös getchar-ratkaisu on purkka. Jos ympäristö tekee normaalien komentorivisoftien kehittämisen hankalaksi, niin vika on ympäristössä eikä sitä kuulu korjata lisäämällä softaan purkkarivejä.

jgz [26.11.2005 18:08:31]

#

En vaan ymmärrä mitä väliä sillä on, että opetellessani c:tä kirjoitin ohjelman loppuun: system("PAUSE");. Mieluummin kirjoitan sen, kuin käynnistän manuaalisesti command linen. Mielestäni on vaan niin paljon helpompaa painaa F9 (Dev-C++ compile and run) ja testata ohjelmaa. Se että se on purkkaa, on minulle aivan sama ja sanottakoon vielä, että sen yhden(1) rivin sieltä ohjelman lopusta saa suhteellisen helposti pois!

Meitsi [26.11.2005 19:49:40]

#

Tjaa... Voisihan tuohon tehdä jonkunlaisen virityksen:

#define release 1

Sitten tutkitaan onko release definattu (tutkitaan siis linkkerin komennoilla) ja tarpeen mukaan kirjoitetaan joku purkka pysäytyskomento. Kun sitten halutaan julkaista joku versio, laitetaan tuohon releaseen joku jännä arvo jonka takia sitten ei kirjoitetakkaan pysäyttelyjä.

Tulipas tyhmästi selitettyä.

hunajavohveli [26.11.2005 20:18:25]

#

jgz kirjoitti:

Se että se on purkkaa, on minulle aivan sama ja sanottakoon vielä, että sen yhden(1) rivin sieltä ohjelman lopusta saa suhteellisen helposti pois!

No miksei tuota jonkinlaisena pikaratkaisuna voi käyttää, kunhan ei ala käytellä samaa jokapuolella ohjelmaa, tai jätä sitä riviä sinne, kun esim. julkistaa lähdekoodin tai porttaa toiselle käyttikselle.

JoinTuanJanohon [26.11.2005 20:45:37]

#

Itse käytän viznutt:in mallia. Ei se <console.h> getch() tai getchar() -funktion käyttö mun mielestä ole purkkakoodia. Jokaisen ohjelman on loogista päättyä johonkin lopetuskomentoon. Esimerkiksi Windows-ohjelma pitää samalla lailla lopettaa painamalla sitä ruksia, tai valitsemalla jokin "exit", "lopeta", tai vastaava. Miksi console-sovelluksen ei voisi päättyä myös jonkinlaiseen järkevään lopetusehtoon. Käytä ihmeessä <console.h> getch() funktiota lopetuskomentoon. Itse usein lähinnä koodin testaamisessa käytän mainissa päättymätöntä luuppia, joka loppuu vasta, kun annetaan merkki q (quit). Esim.:

#include <stdio.h>
#include <conio.h>

void main(void)
{
   printf("q <=> quit\n");

   for (;;)
   {
      printf("testaan...\n");
      printf("testin tulokset...\n");
      if ((char)getch()=='q') break;
   }
}

JoinTuanJanohon [26.11.2005 20:48:30]

#

Ai jaa, se onkin jakomerkkki, eikä mikään keno, jotta koodi näkyy koodina, siis:

#include <stdio.h>
#include <conio.h>

void main(void)
{
   printf("q <=> quit\n");

   for (;;)
   {
      printf("testaan...\n");
      printf("testin tulokset...\n");
      if ((char)getch()=='q') break;
   }
}

Metabolix [26.11.2005 21:15:53]

#

[offtopic]JoinTuanJanohon: Ihan HTML-tyylisesti. Ja viestejä voi muokatakin, niin säästyy lähettämästä kahta peräkkäin.[/offtopic]

Getch ei ole paljon pausea parempi, kun sekään ei ole standardifunktio. (System-funktio sentään löytyy aina, mutta lopputulos riippuu järjestelmästä. Kuten Blaze vastasi kysymykseen, mitä system("pause") tekee: tulostaa tekstin "bash: pause: command not found." :)

Eli jos ihan oikeasti tekee ohjelman opetellakseen koodaamista, niin silloin ehdottomasti jokin kunnollinen systeemi, kuten juuri kysymys "haluatko lopettaa" ja vastauksen odottaminen sekä mahdollinen alkuun palaaminen. Sitten taas jos pitää vain nopeasti saada tulostettua ruudulle alkuluvut väliltä 1 - 1023, niin silloin kyllä itsekin laitan usein system("pause"):n tai fgetc(stdin):n loppuun.

Niin ja vielä jos komentorivin avaaminen on ongelma, niin voi lisätä sen tiedostojen yleiseen right-click-menuun. Sieltä se löytyy nopeasti :)

Jyri [26.11.2005 22:05:33]

#

Päden: Jos haluaa ettei consoliin tule sitä ärsyttävää tekstiä "Paina mitä tahansa nappia jatkaaksesi", niin se lähtee antamalla pausen tekstiksi nul, eli näin:

system("pause>nul");

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta