Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  13 1393
Jeg er veldig noob med C++, og tenkte jeg skulle prøve meg på en enkel kalkis, og fik det selvfølgelig ikke til... Jeg veit hva som er feil, men jeg skjønner ikke hvorfor. Det kan hende at jeg har blanda mange forskjellige språk inn i koden. Har vært borti ganske mange.
Hvis noen hadde giddi å tatt en titt på det, og si meg hva som er galt med: "if (regneform == +)"

(jeg er ikke helt ferdig enda da )

Kode

#include <iostream>
int main(void)
{
	int tall1;
	int tall2;
	char regneform;
	std::cout<<"KALKIS!";
	std::cout<<"							+=pluss -=minus *=ganger /=delt på";
	std::cout<<"skl du ha pluss, minus, ganger eller delt på?";
	std::cin>>regneform;

	if (regneform == +)
	{
		std::cout<<"Skriv inn de første talene i regnestykket (eks. 37)";
		std::cin>>tall1;
		std::cout<<"skriv inn de siste tallene i regnestykket (eks. 37)";
		std::cin>>tall2;
		int tall3 = tall1 + tall2;
		std::cout<<tall1"+"<<tall2"="<<tall3<<std::endl;
	}
	else if (regneform == -)
	{
		std::cout<<"Skriv inn de første talene i regnestykket (eks. 37)";
		std::cin>>tall1;
		std::cout<<"skriv inn de siste tallene i regnestykket (eks. 37)";
		std::cin>>tall2;
		int tall3 = tall1 - tall2;
		std::cout<<tall1"-"<<tall2"="<<tall3<<std::endl;
	}
	else if (regneform == *)
	{
		std::cout<<"Skriv inn de første talene i regnestykket (eks. 37)";
		std::cin>>tall1;
		std::cout<<"skriv inn de siste tallene i regnestykket (eks. 37)";
		std::cin>>tall2;
		int tall3 = tall1 * tall2;
		std::cout<<tall1"*"<<tall2"="<<tall3<<std::endl;
	}
	else if (regneform == /)
		{
		std::cout<<"Skriv inn de første talene i regnestykket (eks. 37)";
		std::cin>>tall1;
		std::cout<<"skriv inn de siste tallene i regnestykket (eks. 37)";
		std::cin>>tall2;
		int tall3 = tall1 / tall2;
		std::cout<<tall1"/"<<tall2"="<<tall3<<std::endl;
	}
	else
		std::cout<< "det er ikke en gyldig regneform"<<std::endl;

	std::cout<< "regnestykket er ferdigregnet!"<<std::endl;
		return 0;
}
Sist endret av Pumazz; 23. november 2008 kl. 19:52.
Trigonoceps occipita
vidarlo's Avatar
Donor
Når du sammenligner med en string så må du quote det. Prøv if (regneform == '+') du.

BTW bør du heller bruke ei case/switch-setning der, det er meir elegant når du skal gjenkjenne tekst på den måten.
Sitat av slashdot Vis innlegg
Når du sammenligner med en string så må du quote det. Prøv if (regneform == '+') du.

BTW bør du heller bruke ei case/switch-setning der, det er meir elegant når du skal gjenkjenne tekst på den måten.
Vis hele sitatet...
Takk, skal prøve, og tenkte på det med switch, men huska ikke helt hvordan det var.
Det snakk om eleganse, kan han også løse dette på en meget flott måte med en funksjonspeker.
Du kan heller ikke sette inn en konstant slik som du har gjort i utskriftssetningen din. Du har skrevet std::cout << variabel"kontstant" , skriv heller std::cout << variabel << "konstant"
Hvorfor bruker du std:: ? er det ikke bare å skrive using namespace std; etter #include. ser ikke så rotete ut.
▼ ... over en uke senere ... ▼
Hei, noe sånt som dette burde vel gjøre susen?

Kode

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int  left, right;
    char oper;
    int  result;
    
    while (cin >> left >> oper >> right)
    {
        switch (oper)
        {
            case '+': result = left + right; 
                      break;
            case '-': result = left - right; 
                      break;
            case '*': result = left * right; 
                      break;
            case '/': result = left / right; 
                      break;
            default : cout << "Bad operator '" << oper << "'" << endl;
                      continue;
        }
        cout << result << endl << endl;
    }

    return 0;
}
▼ ... over en uke senere ... ▼
Sitat av |d13m0b Vis innlegg
Det snakk om eleganse, kan han også løse dette på en meget flott måte med en funksjonspeker.
Vis hele sitatet...
Jeg tok meg friheten til å skrive et eksempel basert på koden i førsteposten som nettopp gjør dette.

Kode

#include <iostream>

using namespace std;

// Funksjoner (regneformer)
float pluss(float a, float b) { return a + b; };
float substraksjon(float a, float b) { return a - b; };
float ganger(float a, float b) { return a * b; };
float dele(float a, float b) { return a / b; };

int main()
{
	// Initsialiser variabler
	float tall1;
	float tall2;
	char regneform;

	// Initsialiser funksjonspekeren
	float (*funksjonspeker)(float, float);

	cout << "Kalkis!\n";
	cout << "+=pluss -=minus *=ganger /=delt på\n";
	cout << "Skal du ha pluss, substraksjon, ganger eller delt på?\n";

	cin >> regneform;

	// Sjekk hvilken regneform vi skal bruke og sett funksjonspekeren til å
	// peke til riktig funksjon
	switch (regneform)
	{
		case '+':
			funksjonspeker = &pluss;
			break;
		case '-':
			funksjonspeker = &substraksjon;
			break;
		case '*':
			funksjonspeker = &ganger;
			break;
		case '/':
			funksjonspeker = &dele;
			break;
		default:
			cout << "Dette er ikke en gyldig regneform\n";
			return 1;
	}

	cout << "Skriv inn det første tallet i regnestykket (eks. 37)\n";
	cin >> tall1;
	cout << "Skriv inn det siste tallet i regnestykket (eks. 37)\n";
	cin >> tall2;

	// Bruk funksjonspekeren til å gjøre kalkulasjonen brukeren valgte
	float tall3 = (*funksjonspeker)(tall1, tall2);

	cout << tall1 << regneform << tall2 << "=" << tall3 << endl;
	
	return 0;
}
▼ ... over en uke senere ... ▼
Sitat av voldern Vis innlegg
*snip*
Vis hele sitatet...
Jeg bare prøvde å bytte ut "substraksjon" med "minus", da fikk jeg beskjed om at 'minus' undecleared når jeg kompilerer.

Har sjekket at jeg har byttet ut begge stedene hvor det står "substraksjon" med "minus"?
Sitat av f00b Vis innlegg
Jeg bare prøvde å bytte ut "substraksjon" med "minus", da fikk jeg beskjed om at 'minus' undecleared når jeg kompilerer.

Har sjekket at jeg har byttet ut begge stedene hvor det står "substraksjon" med "minus"?
Vis hele sitatet...
Dette er fordi en klasse med navnet minus eksisterer i std:
http://www.cplusplus.com/reference/s...nal/minus.html

Og siden det står "using namespace std;" på starten av programmet vil den anta at det er std::minus du refererer til.
Sist endret av voldern; 31. desember 2008 kl. 03:58. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Eleganse?

Kode

% cat kalkis.hs
module Main where
import Control.Monad

main = forever $ getLine >>= \l -> putStrLn $ show $ eval $ words l

eval :: [String] -> Integer
eval (n:op:ns) = case op of
                        "+" -> x + y
                        "-" -> x - y
                        "*" -> x * y
                        "/" -> x `div` y
                        otherwise -> error "Ikke \\d [+-*/] \\d..."
                where  x = (read n)
                       y = eval ns
eval (x:xs) = if null xs then (read x)
                         else error "Whut?"

% ghc -o kalkis kalkis.hs
% ./kalkis
2 + 2
4
4 * 4 + 4
32
Akhkharu: hvilket språk er det?
Sitat av 10goto10 Vis innlegg
Akhkharu: hvilket språk er det?
Vis hele sitatet...
Uten at jeg skal si noe sikkert ligner det veldig på Haskell ?
Sist endret av lsrr; 1. januar 2009 kl. 10:13.
Jepp, Haskell.