Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Mikä vikana?

Sivun loppuun

Jartsala [16.01.2007 17:19:30]

#

Tässä on hyppysellinen koodia joka sisältää 5 virhettä, näettekö mitkä 5 seikkaa on mennyt pieleen :O ohjelman pitäisi kysyä salasanaa jos laitan salasanaksi Possu se sanoo oikein jos laitan jotain muuta se sanoo väärin...

#include <iostream.h>

void main()
{
	char salis;
	while (1)
		{
		cout << "Salasana? ";
		cin >> salis;
		if (salis == "possu")
		{
		    cout << endl << "Oikein!";
		}
		if (salis != "possu")
		{
			cout << endl << "Väärin!";
		}
}

tgunner [16.01.2007 17:23:22]

#

Sulla ei ole char-taulukkona tota salista (tai stringinä, moi sooda).
En sitten tiedä, että vaikuttaako nimiavaruus std noihin couttiin ja ciniin, kun käytät vanhentunutta iostream.h-includea. Mieluummin #include <iostream>

Loput tulevat väärästä vertailutavasta. Tässä vertaat merkkiä merkkijonoon, hyi hyi. Mutta vaikka salis olisikin merkkijono, olisi noiden vertailuoperaattoreiden käyttö kiellettyä.

sooda [16.01.2007 17:24:30]

#

Muuta salis stringiksi. Char on yksi merkki (tai tarkemmin yhden tavun kokoinen luku), ei merkkijono. Myös iostream.h-tyyli on vanhentunut; laita #include <iostream> ja lisää rivi using namespace std; std-nimiavaruuden ottamiseksi käyttöön (tai lisää "std::" stringin, cinin ja coutin eteen)

muoks: äh, etana :(

firebug [16.01.2007 17:25:31]

#

iostream.h -> iostream
using namespace std;
char salis -> std::string salis;

Näillä muutoksillahan tuo jo toimii.

Edit: Hidas kun mikä :I Jos haluat käyttää c-tyylisiä merkkijonoja niin vertailu onnistuu sitten seuraavasti: strcmp(mjono1, mjono2). Ja jäi näköjään vielä void main huomaamatta.

Blaze [16.01.2007 17:26:37]

#

Tulee ihan mieleen ne lastenlehtien "etsi viisi virhettä" -kuvat.

lainaus:

void main()
int main(int argc, char *argv[])

lainaus:

char salis;
String salis;

lainaus:

while (1)

Tämän lopettava aaltosulku puuttuu.

Edit: olinpas hidas. Liikaa tageja, I reckon.

sooda [16.01.2007 17:31:55]

#

Blaze kirjoitti:

String salis;

se on kylläkin pienellä :P

Jartsala [16.01.2007 17:32:18]

#

Kun laittelen noita teidän vinkkejä ni erroreita tulee sellaset 10 ^.^

Esim:
#include <iostream.h> ni tulee 5 virhettä
#include <iostream> ni tulee 11 virhettä..... -.-

Pah ei toemi, joku mättää ja vitusti.

Juuh taitaa olla mun C++ uran loppu, meinaan vaan jos mulla ei o oikeen laista C++ ohjelmaa... paska...

Blaze [16.01.2007 17:38:42]

#

sooda kirjoitti:

Blaze kirjoitti:

String salis;

se on kylläkin pienellä :P

Suokaa anteeksi, oon koodannu koko päivän Javalla.

Metabolix [16.01.2007 17:38:52]

#

#include <iostream> // Oikea otsikko
#include <string> // Toinen, että saa string- eli tekstiluokan käyttöön
using namespace std; // Näille kaveri

int main(int argc, char **argv) // Oikea esittely
{
    string salis; // Sitten se string-tyyppi
    while (1) { // Aaltosulku selvempään kohti
        cout << "Salasana? ";
        cin >> salis;
        if (salis == "possu") {
            cout << "Oikein!" << endl; // Rivinvaihto yleensä loppuun eikä ennen sanaa.
        } else { // Opettelepa se else-lause.
            cout << "Väärin!" << endl;
        }
    } // Sulkeva sulku puuttui
    return 0; // Ja yleensä näinkin on tapana olla
}

Jossain varmaan kannattaa olla myös break, että silmukka loppuisi.

Enkö jossain äskeisessä aiheessa (oliko se se RPG-juttu) kehottanut lukemaan opassarjaa?

firebug [16.01.2007 17:39:12]

#

#include <iostream>
#include <string>

using namespace std;

int main()
{
    std::string salis;

    while (1)
    {
        cout << "Salasana? ";
        cin >> salis;
        if (salis == "possu")
        {
            cout << endl << "Oikein!";
            break; //poistutaan silmukasta
        }
        if (salis != "possu")
        {
            cout << endl << "Väärin!";
        }
    }
    return 0;
}

Deewiant [16.01.2007 17:42:29]

#

Jos sulla on oikeen lainen C++ ohjelma (sic) niin allaoleva kääntyy ja tekee sen, mitä haluat.

#include <iostream>
#include <string>

int main() {
	std::string salis;
	while (1) {
		std::cout << "Salasana? ";
		std::cin >> salis;
		if (salis == "possu")
			std::cout << std::endl << "Oikein!";
		else
			std::cout << std::endl << "Väärin!";
	}
}

EDIT: firebugin koodissa on virhe, siinä on using namespace std, mutta kuitenkin std::string.


Sivun alkuun

Vastaus

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

Tietoa sivustosta