Avatar billede kurran Nybegynder
21. oktober 2007 - 20:57 Der er 7 kommentarer

Brug af switch

Jeg har et problem med mit program, det vil ikke gå ind den switch jeg har lavet:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE *fp1; 
FILE *fp2;
int fx, fy, fc;
double xa,xb,ya,yb, deltax, deltay, vektorrad, vektorgon;
double PI = 3.141592653589793; 


fp1 = fopen("Inddata.txt", "r");
fp2 = fopen("UDDATA.txt", "w");

fscanf(fp1, "%lf %lf %lf %lf", &xa, &xb, &ya, &yb);

deltax = xb-xa;
deltay = yb-ya;
vektorrad = atan(deltay/deltax); //vektor i radianer
vektorgon = (vektorrad/((2*PI)/400)); //fra radianer til gon

if (vektorgon<0)
    vektorgon==(vektorgon+400);

fx = (deltax==0)? 0:((xa<xb)?1:-1);

fy = (deltay==0)? 0:((ya<yb)?1:-1);

fc = (fx==0 && fy==0)?0:(fx==0 && fy==1)?1:(fx==0 && fy==(-1))?2:
      (fy==0 && fx==1)?3:(fy==0 && fx==(-1))?4:(fx==1 && fy==1)?5:
      (fx==(-1) && fy==1)?6:(fx==(-1) && fy==(-1))?7:8;

fprintf(fp2, "%i",fc); // test af fc for at se, om den får den
                        // rigtige værdi

switch(fc)
{
  case '0' : 
      fprintf(fp2, "Fejl! Der er sammenfald mellem de to                punkter");
      break;   
             
  case '1' : 
      fprintf(fp2, "Vektoren er parallel med y-aksen i positiv retning");
      break;     
 
  case '2' : 
      fprintf(fp2, "Vektoren er parallel med y-aksen i negativ retning");
      break;

  case '3' :   
      fprintf(fp2, "Vektoren er parallel med x-aksen i positiv retning");
      break; 
 
  case '4' : 
      fprintf(fp2, "Vektoren er parallel med x-aksen i negativ retning");
      break; 
             
  case '5' : 
      fprintf(fp2, "Vektoren befinder sig i kvadrant 1");
      break; 
             
  case '6' : 
      fprintf(fp2, "Vektoren befinder sig i kvadrant 2");
      break; 
 
  case '7' : 
      fprintf(fp2, "Vektoren befinder sig i kvadrant 3");
      break; 
 
  case '8' : 
      fprintf(fp2, "Vektoren befinder sig i kvadrant 4");
      break; 
 
}

return 0;   
}

Jeg får skrevet fc ud og den får den værdi den skal, men programmet vil ikke gå ind i min switch.

Er der nogen, der kan se hvad der er galt?

På forhånd tak for hjælpen
Avatar billede nielle Nybegynder
21. oktober 2007 - 21:00 #1
Måsk hvis du ændre:

case '0' : 
      fprintf(fp2, "Fejl! Der er sammenfald mellem de to                punkter");
      break;

til:

case "0" : 
      fprintf(fp2, "Fejl! Der er sammenfald mellem de to                punkter");
      break;
Avatar billede erikjacobsen Ekspert
21. oktober 2007 - 21:01 #2
fc er en int, så
  case 0:
Avatar billede gammelhat Nybegynder
21. oktober 2007 - 21:02 #3
'0' er ascii værdien for 0, dvs 48
Avatar billede arne_v Ekspert
21. oktober 2007 - 21:20 #4
case 0 lyder rigtigt.

Jeg kan dog ikke helt se pointen i først at beregne fc i en stribe ?: og så
bagefter lave en switch på fc.

Man kan ikke lave switch på strenge i C/C++.
Avatar billede kurran Nybegynder
21. oktober 2007 - 22:16 #5
Ved ikke hvorfor jeg skrev det på den måde, med strenge istedet for int.
Det virker nu, mange tak for hjælpen.
Men hvem skal have pointene? :)
Avatar billede erikjacobsen Ekspert
21. oktober 2007 - 22:17 #6
Ingen point til mig, tak.
Avatar billede kurran Nybegynder
21. oktober 2007 - 22:18 #7
Jeg er ikke superrutineret i C, derfor er der nok noget overflødig kode arne. Men nu virker det, og det er det vigtigste lige nu
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