Avatar billede zazzy Nybegynder
26. november 2003 - 21:20 Der er 10 kommentarer

Ohms lov regner.. Probs!

Når jeg kører mit program virker det fint, indtil den skal give et resultat! Så hopper den bare ud, hvorfor?

Source koden:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>

int main()
{
    char ch;
    float voltage , current , resistance , effect , result;
    clrscr();

    printf("Ohms lov regner af ZazzY.\n");
    printf("                                                      ");
    printf("V‘r venlig at trykke p† 1,2,3 eller 4:.\n");
                                            ");
    printf("1: Regner sp‘nding/volt ud.\n");
    printf("2: Regner str›m/ampere ud.\n");
    printf("3: Regner modstand/ohm ud.\n");
    printf("4: Regner effekt/watt ud.\n");
    printf("Alle andre knapper vil lukke programmet.\n");

    scanf("%c",&ch);
    switch(ch)
    {
    case '1' :
            printf("V‘r venlig at intaste str›mmen i ampere.\n");
            scanf("%f",&current);
            printf("V‘r derefter venlig at indtaste modstanden i ohm.\n");
            scanf("%f",&resistance);
            result = current * resistance;
            printf("Resultat er %0.2f volt.\n",result);
            break;
    case '2' :
            printf("V‘r venlig at indtaste sp‘‘ndingen i volt.\n");
            scanf("%f",&voltage);
            printf("V‘r derefter venlig at indtaste modtanden i ohm.\n");
            scanf("%f",&resistance);
            result = voltage / resistance;
            printf("Resultatet er  %0.2f ampere.\n",result);
            break;
    case '3' :
            printf("V‘r venlig at indtaste sp‘ndingen i volt.\n");
            scanf("%f",&voltage);
            printf("V‘r derefter venlig at indtaste str›mmen i ampere.\n");
            scanf("%f",&current);
            result = voltage / current;
            printf("Resultatet er %0.2f ohm.\n",result);
            break;
    case '4' :
            printf("V‘r venlig at indtaste sp‘ndingen i volt.\n");
            scanf("%f",&voltage);
            printf("V‘r derefter venlig at indtaste str›mmen i ampere.\n");
            scanf("%f",&current);
            result = voltage * current;
            printf("Resultatet er %0.2f watt.\n",result);
            break;
    default :
            exit(0);
            break;

    }
    return 0;
}



Håber i kan hjælpe!

ZazzY
Avatar billede htm Nybegynder
26. november 2003 - 21:26 #1
smid en

getch();

lige inden din return 0;
Avatar billede htm Nybegynder
26. november 2003 - 21:27 #2
Det er fordi at dit script efter at du har fået printet resultatet hopper scriptet videre. Det er så break, som betyder gå ud af switchen og dermed ud af programmet :-)
Avatar billede zazzy Nybegynder
26. november 2003 - 21:37 #3
Hvordan får jeg så programmet til at køre igen og igen..?
Avatar billede htm Nybegynder
26. november 2003 - 21:46 #4
smider en while løkke på - noget lign:

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

int main()
{
    char ch,run;
    float voltage , current , resistance , effect , result;

    while(run != 1)
    {
        clrscr();

        printf("Ohms lov regner af ZazzY.\n");
        printf("                                                      ");
        printf("V‘r venlig at trykke p† 1,2,3 eller 4:.\n");
                                            ");
        printf("1: Regner sp‘nding/volt ud.\n");
        printf("2: Regner str›m/ampere ud.\n");
        printf("3: Regner modstand/ohm ud.\n");
        printf("4: Regner effekt/watt ud.\n");
        printf("Alle andre knapper vil lukke programmet.\n");

        scanf("%c",&ch);
        switch(ch)
        {
        case '1' :
                printf("V‘r venlig at intaste str›mmen i ampere.\n");
                scanf("%f",&current);
                printf("V‘r derefter venlig at indtaste modstanden i ohm.\n");
                scanf("%f",&resistance);
                result = current * resistance;
                printf("Resultat er %0.2f volt.\n",result);
                break;
        case '2' :
                printf("V‘r venlig at indtaste sp‘‘ndingen i volt.\n");
                scanf("%f",&voltage);
                printf("V‘r derefter venlig at indtaste modtanden i ohm.\n");
                scanf("%f",&resistance);
                result = voltage / resistance;
                printf("Resultatet er  %0.2f ampere.\n",result);
                break;
        case '3' :
                printf("V‘r venlig at indtaste sp‘ndingen i volt.\n");
                scanf("%f",&voltage);
                printf("V‘r derefter venlig at indtaste str›mmen i ampere.\n");
                scanf("%f",&current);
                result = voltage / current;
                printf("Resultatet er %0.2f ohm.\n",result);
                break;
        case '4' :
                printf("V‘r venlig at indtaste sp‘ndingen i volt.\n");
                scanf("%f",&voltage);
                printf("V‘r derefter venlig at indtaste str›mmen i ampere.\n");
                scanf("%f",&current);
                result = voltage * current;
                printf("Resultatet er %0.2f watt.\n",result);
                break;
        default :
                exit(0);
                break;
        }
        getch();
    }

    return 0;
}
Avatar billede htm Nybegynder
26. november 2003 - 21:48 #5
Så kan du jo evt. lave et quitpunkt i din switch som sætter run=1

så afslutter programmet.
Avatar billede bertelbrander Praktikant
26. november 2003 - 22:03 #6
Du bør nok lige sætte run til at være noget (f.ex. 0) inden du bruger den.

Der er jo en vej ud med default:, så man kunne blot lave "while(run != 1)" om til "while(1)"
Avatar billede htm Nybegynder
26. november 2003 - 22:24 #7
Bertel>> Ja selvfølgelig skal
char ch,run; være
char ch,run=0;

Men din løsning syntes jeg ikke om, godt klar over den vil køre igen og igen. men du kan ikke afslutte den uden en break; - det er ikke rigtigt god programmerings måde.
Avatar billede bertelbrander Praktikant
26. november 2003 - 23:00 #8
htm>> Jeg er ikke sikker på jeg forstår hvad du mener med "men du kan ikke afslutte den uden en break".

Om man vil lave en "pæn" afslutning på loop'en eller lave en exit(0)/return 0, er vel mest et spørgsmål om smag og behag.
Avatar billede htm Nybegynder
27. november 2003 - 09:03 #9
Ja helt sikkert er det et spørgsmål om smag. Men jeg syntes ikke det er god programmeringsskik at afslutte while løkken på den har måde.
Avatar billede jakobdo Ekspert
27. november 2003 - 18:03 #10
Når man laver menuer, bruger man gerne denne løsning:

do
{
}while(svar != QUIT);

Altså laver du så din menu inden mellem {} og har et menupunkt som kan sætte svar = QUIT og dermed slutter dit program...
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