Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 16:58 Der er 13 kommentarer og
1 løsning

Hvorfor virker det ikke

Hej!

Jeg har lige lavet mit første helt eget program, i C++ konsol mode/application.

Jeg har lavet en simpel lommeregner, der kun kan pludse. Men nu har jeg udbygget den til at både kunne + - * /.

Men så kommer der fejl i IF sætningen. (den første linje i if sætningen.)

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  int tal1;
  char hvad;
  int tal2;
  int resultat;
 
  cout << "Indtast 2 tal, du vil regne: ";
  cin >> tal1;
  cin >> hvad;
  cin >> tal2;
 
  if (hvad == "+")
  resultat = tal1 + tal2;
  else if (hvad == "-")
  resultat = tal1 - tal2;
  else if (hvad == "*")
  resultat = tal1 * tal2;
  else if (hvad == "/")
  resultat = tal1 / tal2;
 
  cout << resultat;
 
  system("PAUSE");   
  return 0;
}

I må også meget gerne sige til, hvis det er noget grimt kode!!


MVH
Anders
Avatar billede soreno Praktikant
22. maj 2003 - 17:01 #1
Erstat med:
if (hvad == '+')
else if (hvad == '-')
else if (hvad == '*')
else if (hvad == '/')

Når man bruger " " betyder det et char array ('-', '\0')
Når man bruger ' ' betyder det en char ('-').
Avatar billede soreno Praktikant
22. maj 2003 - 17:02 #2
Du bør gøre noget ud af indryk, så er det nemmere at læse:

  if (hvad == '+')
      resultat = tal1 + tal2;
  else if (hvad == '-')
      resultat = tal1 - tal2;
  else if (hvad == '*')
      resultat = tal1 * tal2;
  else if (hvad == '/')
      resultat = tal1 / tal2;
Avatar billede soreno Praktikant
22. maj 2003 - 17:03 #3
Måske endda gøre sådan for at undgå misforståelser:
  if (hvad == '+')
  {
      resultat = tal1 + tal2;
  }
  else if (hvad == '-')
  {
      resultat = tal1 - tal2;
  }
  else if (hvad == '*')
  {
      resultat = tal1 * tal2;
  }
  else if (hvad == '/')
  {
      resultat = tal1 / tal2;
  }
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 17:03 #4
Jamen det virker jo perfekt :o)
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 17:05 #5
Men når man så kører programmet, og har regnet et stykke ud, - hvordan får man så programmet til at starte forfra, når man trykker <enter>, istedet for at programmet lukker, så man ikke skal til at starte det igen?
Avatar billede soreno Praktikant
22. maj 2003 - 17:05 #6
Du kan også lave denne konstruktion:
switch(hvad)
{
  case '+':
    resultat = tal1 + tal2;
    break;

  case '-':
    resultat = tal1 - tal2;
    break;

  case '*':
    resultat = tal1 * tal2;
    break;

  case '/':
    resultat = tal1 / tal2;
    break;

  default:
    cout << "Du har indtastet noget som jeg ikke kan forstå, bedre held næste gang" << endl;
    break;
}
Avatar billede soreno Praktikant
22. maj 2003 - 17:06 #7
Desuden bør du teste om tal2 er == 0 ved division (man kan ikke dividere med 0).
Avatar billede soreno Praktikant
22. maj 2003 - 17:12 #8
Du kan evt. gøre sådan (ikke testet):

do
{
  cout << "Indtast 2 tal, du vil regne: ";
  cin >> tal1;
  cin >> hvad;
  cin >> tal2;
  [cut]

  cout << "Vil du lave en ny beregning [j, n] ? ";
  char input;
  cin >> input;
}while(input != 'n');
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 17:13 #9
oki :o)
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 17:19 #10
Kan altså ikke få det der til at virke. Vil du ikke omskrive dette til at "Vil du lave en ny beregning?" ?

Jeg får bla. fejl i [cut].

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  int tal1;
  char hvad;
  int tal2;
  int resultat;

  cout << "Velkommen til YabiSoft's lommeregner! :o) \n Indtast først et tal, lav et mellemrum, \n indtast dit tegn (+, -, *, /) \n og lav mellemrum, indtast et tal, og tryk <enter> ";
  cin >> tal1;
  cin >> hvad;
  cin >> tal2;
 
  if (hvad == '+')
    resultat = tal1 + tal2;
    else if (hvad == '-')
      resultat = tal1 - tal2;
    else if (hvad == '*')
      resultat = tal1 * tal2;
    else if (hvad == '/')
      resultat = tal1 / tal2;
 
  cout << "\n";
  cout << tal1;
  cout << " ";
  cout << hvad;
  cout << " ";
  cout << tal2;
  cout << " = ";
  cout << resultat;
  cout << "\n \n";
 
  system("PAUSE");   
  return 0;
}
Avatar billede soreno Praktikant
22. maj 2003 - 17:21 #11
Ok, jeg har lavet en udgave som jeg (næsten) ville lave den:
#include <iostream>
#include <stdlib.h>

using namespace std;


int main(int argc, char *argv[])
{
    int tal1, tal2, resultat;
    char operation, input;

    do
    {
        cout << "Indtast 2 tal, du vil regne (f.eks. 2 + 3): ";
        cin >> tal1;
        cin >> operation;
        cin >> tal2;
       
        switch(operation)
        {
            case '+':
                resultat = tal1 + tal2;
                break;
               
            case '-':
                resultat = tal1 - tal2;
                break;
               
            case '*':
                resultat = tal1 * tal2;
                break;
               
            case '/':
                if(tal2 == 0)
                {
                    cout << "Du har indtastet 0 som tal2 ved division - man kan ikke dividere med 0" << endl;
                }
                else
                {
                    resultat = tal1 / tal2;
                }
                break;
               
            default:
                cout << "Du har indtastet noget som jeg ikke kan forstå, bedre held næste gang" << endl;
                break;
        }
        cout << resultat << endl;;
        cout << "Vil du lave en ny beregning [j, n] ? ";
        cin >> input;
    }while(input != 'n');

    system("PAUSE"); 

    return 0;
}
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 17:32 #12
Det virker jo også perfekt!

Jeg takker mange gange!!
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 17:36 #13
Det er da sjovt!

Jeg tror det er tredje gang i dag eller sådan noget, jeg rammer direkte på sekundet!

Kommentar: snuseren.dk
22/05-2003 17:32:00
Avatar billede snuseren.dk Nybegynder
22. maj 2003 - 18:49 #14
Kan man evt. ændre baggrundsfarven?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester