Switch Case Anweisung und das multiplikationszeichen?

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Toni_gr
Beiträge: 3
Registriert: Mo Jun 29, 2015 9:52 pm

Switch Case Anweisung und das multiplikationszeichen?

Beitrag von Toni_gr » Mo Jun 29, 2015 10:19 pm

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;
}

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Switch Case Anweisung und das multiplikationszeichen?

Beitrag von cloidnerux » Mo Jun 29, 2015 11:01 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Switch Case Anweisung und das multiplikationszeichen?

Beitrag von nufan » Di Jun 30, 2015 2:54 am

cloidnerux hat geschrieben:

Code: Alles auswählen

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

Toni_gr
Beiträge: 3
Registriert: Mo Jun 29, 2015 9:52 pm

Re: Switch Case Anweisung und das multiplikationszeichen?

Beitrag von Toni_gr » Di Jun 30, 2015 6:29 am

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?

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: Switch Case Anweisung und das multiplikationszeichen?

Beitrag von mfro » Di Jun 30, 2015 9:26 am

überleg' mal, was ein "*" im Konsolenfenster bewirkt.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Switch Case Anweisung und das multiplikationszeichen?

Beitrag von Xin » Di Jun 30, 2015 9:49 am

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. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Toni_gr
Beiträge: 3
Registriert: Mo Jun 29, 2015 9:52 pm

Re: Switch Case Anweisung und das multiplikationszeichen?

Beitrag von Toni_gr » Mi Jul 01, 2015 12:48 pm

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:

Antworten