Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelma vain vilahtaa

Sivun loppuun

irwinace [07.12.2006 13:41:11]

#

Moro, oon alotellu harjottelee C++ ohjelmointia, mutta ongelmana on, etten jostain syystä pysty compiloimaan mitään. Painan Compile (Tai Ctrl+F9), niin välähtää joku ikkuana ja ei tapahdu mitään. Compile logeista näkyy, että on yksi virhe:

Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\Omistaja\Omat tiedostot\Dev-Cpp\LScript\Makefile.win"
Executing make...
make.exe -f "C:\Documents and Settings\Omistaja\Omat tiedostot\Dev-Cpp\LScript\Makefile.win" all
Execution terminated

Osaako joku auttaa mut aluilleen? =)

osku91 [07.12.2006 14:31:12]

#

laita sinne loppuun system ("PAUSE");

kayttaja-4976 [07.12.2006 14:33:23]

#

Tai sano kääntäjälle ettei se saa sulkea termistä.

Heikki [07.12.2006 15:12:42]

#

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

system("PAUSE") ei ole oikea tapa (vaikka se ei pienissä opetteluohjelmissa paljoa haittaa), sillä se olettaa, että PATH:issa on ohjelma nimeltä PAUSE. Minulla tuollainen sanoo: "bash: PAUSE: command not found".

irwinace [07.12.2006 17:12:45]

#

kayttaja-4976 kirjoitti:

Tai sano kääntäjälle ettei se saa sulkea termistä.

Miten? En tiedä yleisesti muutenkaa tästä kääntämis systeemeistä paljoo... Oon nii paljon webohjelmointiin, ettei tämmönen käytännössä ohjelmien ohjelmointi suju hyvin (compiloidaan ja haetaan kirjastoja yms.) Löytyykö hyvää persteellista suomalaista opasta compiloimisesta?

irwinace [09.12.2006 11:28:18]

#

Sitä ohjelmaa ei siis oo compiloituna mun mielestä missään, et se välähtävä ikkuna oli joku ihme juttu mite ite en tiiä.....

Metabolix [09.12.2006 12:14:31]

#

Kokeilitko nyt tuota system("pause")-komentoa? Sitä varten sinun täytyy koodissasi ottaa includella mukaan stdlib.h. Jos mitään virheilmoituksia ei tule (kuten tuossa ei kai tullut), niin ohjelman pitäisi kyllä olla olemassa, eli tarkistapa vielä uudestaan. Hassua, ettei tuossa näkynyt yhtään kooditiedoston käännöskomentoa, muistaakseni Dev-C++ näyttää nekin. Onhan kooditiedostosi varmasti osa projektia?

irwinace [09.12.2006 12:47:35]

#

Ei onnistu. Siinä muuten vilahti Compile progress -ikkuna... Eli se käytännössä vaan reportoi on saman paskan...

Ja koodissakaan ei pitäis olla vikaa (conioo tarviin myöhemmin, mutten usko että se erroria antais turhasta hausta):

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

int main(void)
{
    printf("Marsu on paskaperse!");

    system("PAUSE");

    return 0;
}

pieslice [09.12.2006 13:05:13]

#

getch();

ton system(pausen) tilalle saattaa auttaa.

irwinace [09.12.2006 15:36:21]

#

Ei auta...

kayttaja-4976 [09.12.2006 16:44:16]

#

Jos windowsissa asustat niin ota vaikka nuo stdlib.h ja conio.h pois. Tuohon HelloWorldiin riittää pelkkä stdio.h tai sit sä oot säätänyt jotain ihan omiasi.

EDIT: ja mitä sä oot kääntäjän asetuksiin laittanut?

tgunner [09.12.2006 17:48:15]

#

Mikset vain mene komentorivillä hakemistoon, jossa ohjelma on ja sitten kirjoita sen nimeä? :o

osku91 [09.12.2006 19:37:32]

#

mulla ei ainakaan pidä olla
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
vaan riittää että on
#include <iostream.h>

sooda [09.12.2006 19:38:41]

#

osku91 kirjoitti:

mulla ei ainakaan pidä olla
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
vaan riittää että on
#include <iostream.h>

Ei se printf kyllä ole iostreamissa. Ja .h-päätteinen iostream on vanhentunut.

irwinace [10.12.2006 00:10:51]

#

No onko sillä tosiaan merkitystä kompiloinnin epäonnistumiseen?

kayttaja-4976, en tiiä compile-settingseistä mitään. Ne on perusasetuksilla...

Metabolix [10.12.2006 11:18:11]

#

En ymmärrä, miten Dev-C++:n käyttäjillä voi olla ongelmia kääntämisessä, mutta ehkäpä se sitten toimii salaperäisesti aivan eri tavalla muilla kuin minun koneellani. ^^ No mutta suosittelen kuitenkin, että opettelet komentorivin käyttöä ja alat kääntää ohjelmiasi sitä kautta. Silloin opit käyttämään kääntäjää ja voit vaikka väsätä jossakin vaiheessa omat käännösskriptit tai jotain.

Järjestä siis niin, että kääntäjäohjelma on polussa.
SET PATH=C:\Dev-C++\bin;%PATH%
Sitten käännä ohjelmasi.
g++ koodi.cpp -o ohjelma.exe
Ja aja se.
ohjelma.exe

koo [10.12.2006 17:54:45]

#

Mitä tässä nyt oikein hösätään? Nuo vihoviimeiset PAUSE-ehdotukset ja header-korjaukset eivät vissiin liity millään lailla tähän ongelmaan, eihän tässä edes ole päästy siihen asti, että käännettyä ohjelmaa jotenkin ajettaisiin.

Kääntäminenkö siis ei onnistu? Mulla ei ole samaa kääntäjää, mutta yleensä homma menee kyllä niin, että käännös joko onnistuu tai sitten se epäonnistuu niin, että siitä tulee jokin virheilmoitus. Onko tosiaan niin, että lopputuloksena on pelkästään "Execution terminated"? Jos tuo on todellakin kaikki, mitä millekään ruudulle tai lokiin ilmaantuu, Dev-C++ on varmaankin puutteellisesti asennettu.

kayttaja-4976 [10.12.2006 20:21:05]

#

Dev-C++ muistaakseni kääntää sorsat uudessa ikkunassa. Jos sinne ei tuu mitään missä lukisi "Error" niin luulisi kääntämisen onnistuvan. Unohtuiko että ohjelma pitää myös ajaa? Aika merkillisesti toimiva laite jos et toimi niin kuin muilla.

irwinace [10.12.2006 22:26:18]

#

Metabolixin ideaa "konsolista kääntäminen" on suorastaan ihanaa, mutta kun alla on Winukka, niin en sitten millään suostu leikki jonkin alkeispaskan MS-DOSIA.... Linuxia käyttäisin, mutta on ohjelmia, joita käytän päivittäin ja niitä ei saa toimimaan täysin Linukassa..... Joten winukkaan haluun käyttää tätä graafista käyttöliittymää pelkästään...

Koo, kyllä. Siinä lukee perässä "Execution terminated"... En tiiä yhtään onko puutteellisesti asennettu, mutta Visual C++ kun yritin kääntää yhtä sourcee dll-kirjastoon, niin se valitti jotain että windows.h puuttuu, siihen joku heitti jotain, että hae Windows Server 2003 .net Platform SDK, tai jotain... Liittyiskö tää asiaan?

kayttaja-4976, erillinen ikkuna kyllä tulee ja menee (prosessi kestää 5ms =) Sitten ei voi muuta kun kattoo sinne mihkä lie compile log ikkunaan... Mitä tarkotat, että ohjelma pitää ajaa?

rndprogy [11.12.2006 00:07:28]

#

Käynnistä->Suorita->cmd
¯\(º_o)/¯

Metabolix [11.12.2006 00:35:44]

#

No johan nyt. "En voi tehdä sitä haluamallani tavalla, niin en sitten suostu tekemään."

VC++ Express vaatii Platform SDK:n. Dev-C++ ei vaadi. Ajaminen tarkoittaa, että ohjelma pitäisi käynnistää myös. Painapa pelkkää F9:ä, niin se muistaakseni sekä kääntää että ajaa. Eihän kääntäessä ohjelman kuulukaan käynnistyä.

kayttaja-4976 [11.12.2006 10:46:49]

#

Metabolix kirjoitti:

Painapa pelkkää F9:ä, niin se muistaakseni sekä kääntää että ajaa. Eihän kääntäessä ohjelman kuulukaan käynnistyä.

Juuri niin! Etkö tiedä että ohjelma pitää ajaa? o/ Siellä on jossain Build-valikossa "Execute" tjsp. Klikkaa sitä.

irwinace [12.12.2006 13:32:12]

#

Ei se mitään aja, ja eikä pysty kääntämään, edelleen... Ilmottaa compile logeissa ylläolevan tekstin ja ei näy exe-tiedostoo missään...

No jos suosiolla lopetan C++:aan tutustumisen =/

pukki [12.12.2006 14:03:01]

#

Ihan varmuuden vuoksi, oletko kokeillut komentoa Build komennon Compile sijaan ja sitten sen jälkeen etsit sitä valmista exeä. Jospa tuo Dev-cpp avuliaasti poistaa exen compile+runin jälkeen. Ja jos se pelkällä compilella jättää linkkaamisen sikseen eli tuottaa pelkän objektitiedoston.

sypress [12.12.2006 14:58:18]

#

Pistä sinne loppuun:

cin.ignore(1000, '\n').ignore(1000, '\n');

Antti Laaksonen [12.12.2006 15:35:14]

#

Dev-C++:n kanssa on ollut aikojen kuluessa ongelmia yhdellä jos toisellakin. Monta surullista tarinaa löytyy haulla. Minun tietääkseni mitään kunnon ratkaisua ei ole keksitty, eli on lähinnä onnenkauppaa, toimiiko Dev-C++ omalla koneella vai ei. Toki on paljon niitäkin, joilla Dev-C++ toimii alusta alkaen moitteettomasti. Valitettavasti en osaa auttaa enempää, kun satun kuulumaan jälkimmäiseen ryhmään.

irwinace [12.12.2006 22:23:18]

#

Hmm. Nyt näyttäis toimivan aika hyvin... Asensin nelosversion... Toi uusin beta ei todennäkösesti ollu yhteensopiva mun koneen kanssa... Kiitoksia silti tuesta ja vaivasta =)

Metabolix [13.12.2006 07:19:24]

#

"Uusin beta" on jo pari vuotta vanha. Eipä taida tuokaan ohjelma enää paljon kehittyä.

Kentti [14.12.2006 09:13:07]

#

Metabolix kirjoitti:

Kokeilitko nyt tuota system("pause")-komentoa? Sitä varten sinun täytyy koodissasi ottaa includella mukaan stdlib.h. Jos mitään virheilmoituksia ei tule (kuten tuossa ei kai tullut), niin ohjelman pitäisi kyllä olla olemassa, eli tarkistapa vielä uudestaan. Hassua, ettei tuossa näkynyt yhtään kooditiedoston käännöskomentoa, muistaakseni Dev-C++ näyttää nekin. Onhan kooditiedostosi varmasti osa projektia?

Istelläni ainakin toimii tuo Dev-Cpp, joten olisikohan tämä sitä, mistä Antti mainitsi..

Mutta esim. tällainen ohjelma toimii moitteettomasti, vaikka ei komentoriviltä avaisikaan ja ei olisi tehnyt Projectina ja puhtaana lähdekoodina:

# include <iostream>
using namespace std;
# include <stdio.h>

int main() {

    puts("Nyt tulostuu tekstii!!");

    system("PAUSE > nul");
    system("CLS");
    system("ECHO Bat-tyyliin...");
    system("ECHO.");
    system("PAUSE");

    return 0;
}

Missä iostream noita system-komentoja varten.

koo [14.12.2006 14:23:52]

#

Kentti kirjoitti:

Mutta esim. tällainen ohjelma toimii moitteettomasti

Voi ei! Kyllä mullakin toimii vatupassilla naulaaminen ihan moitteettomasti, mutta koska tajuan naulaamisesta jotakin, en pidä sitä oikein malliratkaisuna.

Oikea tapa tämän vilautteluonglman hoitoon on se, että konffaa työkalun niin, että ajon jälkeen ikkuna ei heti sulkeudu. Jos tämä on mahdotonta, kannattaa työkalu ensin kirota perimmäiseen hornan tuuttiin, sitten itkeä kurjaa kohtaloa, ja vaihtaa työkalua tai muuttaa ohjelman logiikkaa niin, että loppuun pari tulee pari ylimääräistä lukukomentoa odottamaan käyttäjän enteriä.

Jos homman meinaa tehdä C++:lla, sypressin ehdottama cin.ignore-temppu on erinomaisen hyvä hätäkeino ja se vaatii, että koodissa on #include <iostream>. Huom: Älkää enää kaupatko iostream.h:ta!

Jos meinaa tehdä DOS-riippuvaista huttua, niin siitä vain sitten käyttämään tuota system-funktiota ja dossin PAUSE-komentoa. Heikki kyllä aika selvästi sanoi, mikä siinä voi mättää. Metabolix kertoi oikean include-tiedostonkin nimen, vaikka C++:ssa cstdlib onkin suositeltavampi.

Se, että Kentin koodi toimii, on ihan kiva yhteensattuma. C++-headerit voivat includoida toisia headereita, mutta siitä ei ole mitää takeita. Voipa olla niinkin, että koska Dev-C++ toimii välillä kuin vanha romu, se nyt vaan sallii system-funktion käytön, vaikkei mikään headeri sitä esittelisikään.

Kentti [14.12.2006 15:41:56]

#

koo kirjoitti:

Voipa olla niinkin, että koska Dev-C++ toimii välillä kuin vanha romu, se nyt vaan sallii system-funktion käytön, vaikkei mikään headeri sitä esittelisikään.

Tuo Dev-Cpp kyllä toimii silloin tällöin hieman arveluttavasti, mutta toimii loistavasti harjoitteluun.

Ja se ei muuten salli system()-komentoa, ellei iostreamia ole sisällytetty :)
Niissä tapauksissa se käännettäessä heittää herjan.

Metabolix [14.12.2006 17:07:34]

#

Nyt olet kuule Kentti väärässä. Miten luulet, että C-ohjelmassa voisi käyttää system-funktiota, kun eihän C:ssä ole iostream-otsikkoa? Oikea otsikko on edelleenkin stdlib.h eli C:ssä cstdlib, ja vaikka iostream sattuukin tuossa tapauksessa ilmeisesti myös sen liittämään, iostream ei silti ole oikea otsikko tuohon. Ja itse käännöksen toiminnassa ja toimimattomuudessa on takana mingw32 eli GCC, joka on kyllä sinänsä varsin hyväksi todettu kääntäjä.

(Ja aika kumman pätkän lainasit tuossa aiemmassa viestissäsi, eihän se puhunut mitään Dev-C++:n toimimattomuudesta. ^^)


Sivun alkuun

Vastaus

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

Tietoa sivustosta