Seite 1 von 1

Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Mo Jun 29, 2015 10:19 pm
von Toni_gr
Hallo Forenmitglieder,
ich bin ganz neu hier im Forum und brauche einen Rat von euch.

Ich habe das Problem das bei meiner Switch Case Anweisung das Multiplikationszeichen nicht erkannt wir und dafür dann der default Block ausgeführt wird.
Die anderen Operationszeichen funktionieren.
Was kann das Problem sein?
Vielen Dank für jegliche Hilfe.
Hier der Code:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <assert.h>


main(int argc, char *argv[])
{


double x, y, z;
if(argc < 4){
printf("\nAufruf: %s zahl1 op zahl2",argv[0]);
exit(1);
}

x=atof(argv[1]);
y=atof(argv[3]);

switch(argv[2][0]){

case '+':
     z=x+y;
break;      

case '-':
     z=x-y;  
break;

case '*':
     z=x*y;
break;

case '/':
     z=x/y;
break;

default:
        printf("\n Falsches Operationszeichen!");
        exit(2);
}
printf("%s %s %s = %.2f\n",argv[1],argv[2],argv[3],z);

  system("PAUSE");	
  return 0;
}

Re: Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Mo Jun 29, 2015 11:01 pm
von cloidnerux
Das Problem liegt nicht direkt an dir, sondern an der art und weise, wie das System arbeitet.
Dazu habe ich deinen Source-Code mal etwas erweitert:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <assert.h>


main(int argc, char ** argv)
{
	double x, y, z = 0.0;
	if(argc < 4){
		printf("\nAufruf: %s zahl1 op zahl2",argv[0]);
		exit(1);
	}

	x=atof(argv[1]);
	
	printf("%s\n", argv[0]);
	printf("%s\n", argv[1]);
	printf("%s\n", argv[2]);
	printf("%s\n", argv[3]);
	printf("%s\n", argv[4]);
	
	y=atof(argv[3]);
	
	printf("x = %f und y = %f", x, y);
	
	switch(argv[2][0]){

		case '+':
			 z=x+y;
			break;      

		case '-':
			 z=x-y;  
			break;

		case '*':
			 z=x*y;
			break;

		case '/':
			 z=x/y;
			break;

		default:
			printf("\n Falsches Operationszeichen!");
			printf("%d %d", '*', argv[2][0]);
			exit(2);
	
	}
	printf("%s %s %s = %.2f\n",argv[1],argv[2],argv[3],z);

	system("PAUSE");   
	return 0;
}
Schau dir die einzelnen Ausgaben an und versuche die Ergebnisse zu interpretieren.

Re: Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Di Jun 30, 2015 2:54 am
von nufan
cloidnerux hat geschrieben:

Code: Alles auswählen

	printf("%s\n", argv[4]);
Das wär eher nicht so gut :)

Re: Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Di Jun 30, 2015 6:29 am
von Toni_gr
Okay, wenn ich mir jetzt die Ausgabe anschaue,
stelle ich fest das bei der Ausgabe von argv[2] dort nun "Anwendungsdaten" steht, anstatt des Operationszeichen. Und bei argv[3] "AppData".
Argv[0] und [1] sind korrekt, sowie die Ausgabe von x. Nur y gibt mir einen Wert von "0" aus. Gibt es jetzt nur die Möglichkeit ein anderes Zeichen zu verwenden? Und was genau bedeutet Anwendungsdaten in diesem Fall?

Re: Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Di Jun 30, 2015 9:26 am
von mfro
überleg' mal, was ein "*" im Konsolenfenster bewirkt.

Re: Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Di Jun 30, 2015 9:49 am
von Xin
Toni_gr hat geschrieben:Okay, wenn ich mir jetzt die Ausgabe anschaue,
stelle ich fest das bei der Ausgabe von argv[2] dort nun "Anwendungsdaten" steht, anstatt des Operationszeichen. Und bei argv[3] "AppData".
Die Shell setzt für "*" alle Dateinamen ein. Das einfachte ist wohl, wenn Du statt des '*' Zeichens zum Beispiel das Schweinegatter ('#') nimmst.
Dein Programm sollte funktionieren unter Linux, wenn du

Code: Alles auswählen

programm 4 \* 5
schreibst. Der Backslash sorgt dafür, dass der * von der Shell nicht interpretiert wird.
Toni_gr hat geschrieben:Und was genau bedeutet Anwendungsdaten in diesem Fall?
Dass Du nicht unter Linux unterwegs bist, sondern Dich in Deinem Benutzerverzeichnis unter Windows befindest - wo eben ein Verzeichnis "Anwenderdaten" liegt. :-)

Re: Switch Case Anweisung und das multiplikationszeichen?

Verfasst: Mi Jul 01, 2015 12:48 pm
von Toni_gr
Okay danke.
Jetzt verstehe ich es. Bisher habe ich mich mit Konsolen bzw. der Eingabeaufforderungen nicht beschäftigt und konnte mit der Ausgabe nichts anfangen :roll: