Avatar billede saj Nybegynder
21. juli 2003 - 16:41 Der er 29 kommentarer og
2 løsninger

Min while går i fisk

hvorfor går denne lykke i fisk, den bliver ved med at skrive det forgående igen og igen...
også selv om svar ikke er lig ud...

while (svar == ud){

//S.A.J.
Avatar billede chries Nybegynder
21. juli 2003 - 16:43 #1
hvilken type er svar og ud ? hvis det er arrays, skal du bruge strcmp istedet.

while( strcmp(svar, ud) == 0 )
Avatar billede saj Nybegynder
21. juli 2003 - 16:47 #2
okay, det er kun når man indtaster bogstaver den går i fisk køre fint med tal...
Avatar billede saj Nybegynder
21. juli 2003 - 16:49 #3
når jeg definere dem eller hvad det nu hedder skal jeg så ikke skrive noget andet end int?? jeg er lidt af en noob...
Avatar billede chries Nybegynder
21. juli 2003 - 16:49 #4
hvad med noget mere kode så, mere kan man ikke sige ud fra det du har postet :)
Avatar billede saj Nybegynder
21. juli 2003 - 16:53 #5
det er en pænt lang kode:

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

using namespace std;

int main(void)
{

HANDLE con = GetStdHandle(STD_OUTPUT_HANDLE);

    //første if
    int x1 = 1; // 1: x første sted,
    int x2 = 2; // 2: x andet sted...
    int place;//andet valg
    //andet if
    int a = 'a';//addtion
    int s = 's';//substration
    int m = 'm';//mutiplation
    int d = 'd';//divition
    int i; //første tal
    int ii; //andet tal
    char form; //plus, minus, gange eller dividere
    int resultat; //resultatet
    int svar = 'y';
    int ud = 'n'; 

while ( strcmp(svar, ud) == 0)
{   
    cout << "foerste(tast 1): 'x(a)(b)=(c)' eller andet(tast 2): '(a)(b)x=(c)'??" << endl;
    cin >> place;

    if (place == x1)
    {
        cout << "X(A)(B)=(C) fx: x+1=2" << endl;
        cout << "hvad skal andet led i styket vaere??(B)" << endl;
        cin >> i;
        cout << "hvad er resultatet?? (C)" << endl;
        cin >> ii;
        cout << "skal der a(+), s(-), m(*) eller d(/)?? (A)" << endl;
        cin >> form;
       
        if (form == a)
        {
                cout << "stykket er: X+" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
        }
        else if (form == s)
        {
                cout << "stykket er: X-" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii + i << endl;
        }
        else if (form == m)
        {
                cout << "stykket er: X*" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii / i << endl;
        }
        else if (form == d)
        {
                cout << "stykket er: X/" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii * i << endl;
        }
        else
        {
                cout << "Forkert indtastning";
        }
    }
    else if (place == x2)
    {
        cout << "(A)(B)X=(C) fx: 1+x=2" << endl;
        cout << "hvad skal foerste led i styket vaere??(A)" << endl;
        cin >> i;
        cout << "hvad er resultatet?? (C)" << endl;
        cin >> ii;
        cout << "skal der a(+), s(-), m(*) eller d(/)?? (B)" << endl;
        cin >> form;
       
        if (form == a)
        {
                cout << "stykket er: " << i << "+X=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
        }
        else if (form == s)
        {
                cout << "stykket er: " << i << "-X=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
        }
        else if (form == m)
        {
                cout << "stykket er: " << i << "*X=" << ii << endl;
                cout << "og resultatet er: X=" << ii / i << endl;
        }
        else if (form == d)
        {
                cout << "stykket er: " << i << "/X=" << ii << endl;
                cout << "og resultatet er: X=" << i / ii << endl;
        }
        else
        {
                cout << "Forkert indtastning";
        }
    }
    else
    {
        cout << "forkert indtastning...";
    }

cin >> svar;   
}

cout << "The end, then";


return 0;
}
Avatar billede arne_v Ekspert
21. juli 2003 - 16:59 #6
Den kode compiler ikke.

DU kan ikke lave strcmp på 2 int.
Avatar billede saj Nybegynder
21. juli 2003 - 17:02 #7
nej det fandt jeg ud af men hvad skal jeg så gøre, kan jeg definere dem som noget andet end int??
Avatar billede arne_v Ekspert
21. juli 2003 - 17:04 #8
Int burde være OK.
Avatar billede chries Nybegynder
21. juli 2003 - 17:04 #9
alle din bogstav input skal være af typen char. og gå tilbage til din "while (svar == ud){".

char a = 'a';
char svar = 'y';
osv..

og alle steder du forventer en bogstav/tegn, skal være char.

char ii;
cin >> ii;

det ville dog være bedre hvis du kode alle stder om til at tage strenge.

char input[128];

cin >> input;

( input[0] == 'a' ) ....

int tal_val = atoi(input);
Avatar billede segmose Nybegynder
21. juli 2003 - 17:07 #10
while (svar == ud) er også forkert det skulle nok være

while (svar != ud)

Jeg går ud fra du mener når svar forskellig fra ud så kør lykke igen.
Avatar billede saj Nybegynder
21. juli 2003 - 17:08 #11
er der ikke nogle der kan taget et input på mere end et bogstav?? i, ii og place: får tal som input, så det skal vel ikke være char...
Avatar billede chries Nybegynder
21. juli 2003 - 17:11 #12
hvis i og ii ikke skal være et "bogstav" men tal, skal de selvfølgelig være int :)
Avatar billede segmose Nybegynder
21. juli 2003 - 17:11 #13
her kan lige så godt bruge tal, da de er tal i forvejen.
Avatar billede arne_v Ekspert
21. juli 2003 - 17:20 #14
Jeg ved godt at det er et lidt voldsomt spring.

Men prøv lige og leg lidt med følgende kode:

#include <iostream>

using namespace std;

int main()
{
  int v1, v2;
  char op,cont;
  do {
      cout << "v1 op x = v2" << endl;   
      cout << "Enter v1: ";
      cin >> v1;
      cout << "Enter op (+,-,*,/): ";
      cin >> op;
      cout << "Enter v2: ";
      cin >> v2;
      cout << v1 << op << "x=" << v2 << endl;
      if(op=='+') {
          cout << "x=" << (v2 - v1) << endl;
      } else if(op=='-') {
          cout << "x=" << (v1 - v2) << endl;
      } else if(op=='*') {
          cout << "x=" << (v2 / v1) << endl;
      } else if(op=='/') {
          cout << "x=" << (v1 / v2) << endl;
      }
      cout << "Continue (y,n): ";
      cin >> cont;
  } while(cont=='Y' || cont=='y');

}
Avatar billede saj Nybegynder
21. juli 2003 - 17:20 #15
jeg har fået det til at virke nu, jeg lavede bare svar og ud om til char. Men hvis jeg nu har brug for en variabel der kan indeholde mere end 1 bogstav, hvad gør jeg så??
Avatar billede segmose Nybegynder
21. juli 2003 - 17:21 #16
Nu har jeg lavet første del om til en switch, men er for doven til også at lave del 2.

int main(void) {  // Du kan da ikke helt være noob, du bruge da int main!!!
  HANDLE con = GetStdHandle(STD_OUTPUT_HANDLE);  // bruges den til noget???
  //første if
    int place;//andet valg
    //andet if
    int i; //første tal
    int ii; //andet tal
    char form; //plus, minus, gange eller dividere
    char svar = 'y';
    const char ud = 'n';

while ( svar != ud) {
    cout << "foerste(tast 1): 'x(a)(b)=(c)' eller andet(tast 2): (a)(b)x=(c)'??" << endl;
    cin >> place;

    if (place == 1) {
        cout << "X(A)(B)=(C) fx: x 1=2" << endl;
        cout << "hvad skal andet led i styket vaere??(B)" << endl;
        cin >> i;
        cout << "hvad er resultatet?? (C)" << endl;
        cin >> ii;
        cout << "skal der a( ), s(-), m(*) eller d(/)?? (A)" << endl;
        cin >> form;
     
        switch (form)
          case 'a':
                cout << "stykket er: X " << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
                break;
          case 's':
                cout << "stykket er: X-" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii  i << endl;
                break;
          case 'm':
                cout << "stykket er: X*" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii / i << endl;
                break;
          case 'd':
                cout << "stykket er: X/" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii * i << endl;
                break;
            default: // default if none of above.
                cout << "Forkert indtastning";
                break;
        }
    }
    else if (place == 2)
    {
        cout << "(A)(B)X=(C) fx: 1 x=2" << endl;
        cout << "hvad skal foerste led i styket vaere??(A)" << endl;
        cin >> i;
        cout << "hvad er resultatet?? (C)" << endl;
        cin >> ii;
        cout << "skal der a( ), s(-), m(*) eller d(/)?? (B)" << endl;
        cin >> form;
     
        if (form == 'a')
        {
                cout << "stykket er: " << i << " X=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
        }
        else if (form == 's')
        {
                cout << "stykket er: " << i << "-X=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
        }
        else if (form == 'm')
        {
                cout << "stykket er: " << i << "*X=" << ii << endl;
                cout << "og resultatet er: X=" << ii / i << endl;
        }
        else if (form == 'd')
        {
                cout << "stykket er: " << i << "/X=" << ii << endl;
                cout << "og resultatet er: X=" << i / ii << endl;
        }
        else
        {
                cout << "Forkert indtastning";
        }
    }
    else
    {
        cout << "forkert indtastning...";
    }
cout << "Done ? (y/n)" ;
cin >> svar; 
}

cout << "The end, then";

return 0;
}
Avatar billede segmose Nybegynder
21. juli 2003 - 17:23 #17
Så laver du en

char buf[BUFSIZ]; // BUFSIZ har en "fornuftig" værdi, eller angiv selv en.

cin.getline(???) >> buf; // burde være cin.getline da normal cin giver buffer overløb hvis jeg tester det.
Avatar billede saj Nybegynder
21. juli 2003 - 17:23 #18
@arne_v den var godt nok en del kortere end min kode, men der er dog heller ikke så meget tekst...
Avatar billede arne_v Ekspert
21. juli 2003 - 17:24 #19
Hvis du skal bruge mere end et bogstav skal du bruge en streng af en art.

standard C: char array nul termineret

standard C++: STL string

MFC : CString
Avatar billede chries Nybegynder
21. juli 2003 - 17:25 #20
for flere tegn:

char input[128];
cin >> input;

( strcmp( input, "ja" ) == 0  ) // == 0 -> ens
Avatar billede chries Nybegynder
21. juli 2003 - 17:25 #21
getline var nok bedre :)
Avatar billede arne_v Ekspert
21. juli 2003 - 17:26 #22
Du kan jo evt. bruge mit eksempel til inspiration.
Avatar billede saj Nybegynder
21. juli 2003 - 17:30 #23
okay... mange tak for hjælpen!! hvem skal have point??
Avatar billede saj Nybegynder
21. juli 2003 - 17:39 #24
hvorfor får jeg fejl i denne kode, fejlen er ved "case 's':"

        switch (form)
          case 'a':
                cout << "stykket er: X " << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii - i << endl;
                break;
          case 's':
                cout << "stykket er: X-" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii  i << endl;
                break;
          case 'm':
                cout << "stykket er: X*" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii / i << endl;
                break;
          case 'd':
                cout << "stykket er: X/" << i << "=" << ii << endl;
                cout << "og resultatet er: X=" << ii * i << endl;
                break;
Avatar billede saj Nybegynder
21. juli 2003 - 17:45 #25
fandt selv ud af det havde glemt { og }
Avatar billede arne_v Ekspert
21. juli 2003 - 17:45 #26
Der mangler ihvertfald en { efter switch:

switch (form) {
Avatar billede saj Nybegynder
21. juli 2003 - 18:09 #27
ja, det ver det som var problemet... det har du i øvrigt også i den kode du postede...
det virker lidt som om at hvis der ikke er det ene i vejen så er det andet.... nu vil min while nemlig ikke igen...

while (svar != 'n' || 'N'){

selv om jeg trykker n køre den igen...
Avatar billede saj Nybegynder
21. juli 2003 - 18:11 #28
hmm... det er lidt sært men nu virker den igen....
Avatar billede arne_v Ekspert
21. juli 2003 - 18:12 #29
Prøv med:

while (svar != 'n' && svar != 'N'){
Avatar billede arne_v Ekspert
21. juli 2003 - 18:13 #30
Og det var segmose der postede switch ikke mig.
Avatar billede segmose Nybegynder
22. juli 2003 - 09:02 #31
> saj
Husk

default:

i alle switches, det er godt til at fange uforusete indtastninger og ubehandlede sager.
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