Einfacher taschenrechner



  • Ach noch was.
    In char text[5]; passt der Text "Multi" oder "Minus" nicht rein.

    Jeder String wird mit einem '\0' (das Zeichen mit dem Wert 0) abgeschlossen. Das braucht auch Platz.

    In so einem Fall darfst du großzügig sein: char text[100];
    Und dann beim einlesen noch die Anzahl der Zeichen mit angeben: scanf("%99s", text);



  • Danke für die Zahlreiche hilfe.

    Ich wollte es jetzt so probieren:

    #include "Taschenrechner2.h"
    
    int main()
    {
    	float x;
    	float y;
    	char r;
    	float a;
    	float s;
    	float d;
    	float m;
    	char text[5];
    
    	printf("Geben sie die 2 Operanden x und y ein\n");
    	scanf("%f %f", &x, &y);
    
    	printf("Wählen sie welche Rechenart sie ausführen wollen mit Plus Minus Div Multi ");
    	scanf("%c", r);
    
    	if (r =='+')
    	{
    		a=x+y;
    		printf("%f", a);
    	}
    	else if (r=='-')
    	{
    		s = x-y;
    		printf("%f", s);
    	}
    	else if (r =='/')
    	{
    		d = x/y;
    		printf("%f", d);
    	}
    	else if (r =='*')
    	{
    		m = x*y;
    		printf("%f", m);
    	}
    	else
    	{ printf("Fehler, diese Rechenart nicht bekannt");
    	}
    
    	system("pause");
    	return 0;
    
    }
    

    Klappt nur leider nicht...:( im header sind nur stdlib und stdio

    }



  • Zeile 19:
    noch mal in den beiden Links schauen!

    Warum lagerst du die Header aus und lässt die nicht im gezeigten Quelltext?



  • DirkB schrieb:

    Nach dem einlesen der Zahlen musst du aber erst den Eingabepuffer löschen, damit du das Zeichen auch einlesen kannst. Wie das geht, kannst du bei http://www.c-plusplus.net/forum/p1146014#1146014 nachlesen.

    Den Code aus dem Link fügst du nach deinem scanf("%f %f", &x, &y); ein.
    Die Variablendefinition (das int c;) muss evtl. zu den anderen Variablen.

    Und "Klappt nur leider nicht..." ist die blödeste Fehlerbeschreibung die geht.

    Du kannst da z.B. auch

    printf("Sie haben %f %c %f eingegeben\n", x, c, y);
    

    einfügen, damit du siehst was gelesen wurde.



  • printf("Sie haben %f %c %f eingegeben\n", x, r, y); // die Variable heißt r
    


  • Canfaenger schrieb:

    Klappt nur leider nicht...:(

    Schreibe doch bitte gleich Fehlermeldung/-beschreibung dazu. Sonst muss man unnötig viel Code lesen. 🙂

    EDIT: Und scanf hat übrigens auch einen Rückgabewert, siehe Doku.



  • Die scanf-Doku wär überhaupt guter Lesestoff. Man könnte hier den [-Spezifikator wunderbar für sich einspannen:

    #include <stdio.h>
    
    int main(void) {
      double x, y;
      char op;
    
      if(3 == scanf("%lf %[+-*/] %lf", &x, &op, &y)) {
        switch(op) {
        case '+': printf("%g\n", x + y); break;
        case '-': printf("%g\n", x - y); break;
        case '*': printf("%g\n", x * y); break;
        case '/': printf("%g\n", x / y); break;
        }
      } else {
        fputs("Fehler beim Einlesen\n", stderr);
        return -1;
      }
    
      return 0;
    }
    


  • Nicht ganz.
    Der [-Spezifikator erwartet einen Zeiger auf ein char-Array, groß genug für alle Zeichen plus der abschließenden '\0'.

    ...
      char op[2];
    
      if(3 == scanf("%lf %1[+-*/] %lf", &x, &op, &y)) {
        switch(op[0]) {
      ....
    


  • Hey jungs,

    ich bin sehr dankbar für eure hilfe, leider klappts wirklich nicht so wie ich mir das vorstelle.

    Mir wird gesagt, dass meine variable r nicht initalisiert ist/wird? Dabei mache ich das doch. Habe ich vielleicht den falschen datentyp gewählt. Meine vorhaben ist, die in die variable r den eingegeben rechenoperator abzulegen und dann in der if funktion zu überprüfen welcher gewählt wurde.



  • Nein, du tust es nicht. Du deklarierst r hier:

    char r;
    

    Reine Deklaration, ohne Initialisierung mit einem Wert. Dann verwendest du r , und zwar leider falsch:

    scanf("%c", r);
    

    scanf möchte gerne den gelesenen Wert in einer Variablen speichern. Also musst du ihm zeigen, wo er speichern soll. Das machst du, indem du ihm die Adresse von r übergibst ( &r ), nicht r selbst.



  • Oh man was für ein dummer flüchtigkeitsfehler : ( danke dir.

    Jetzt hab ichs geändert und nun überspringt er einfach dieses "scanf" für die Rechenart und gibt mir direkt aus, das die rechenart nicht bekannt ist, ohne das ich etwas eingebe.



  • CAnfaenger schrieb:

    Oh man was für ein dummer flüchtigkeitsfehler : ( danke dir.

    Jetzt hab ichs geändert und nun überspringt er einfach dieses "scanf" für die Rechenart und gibt mir direkt aus, das die rechenart nicht bekannt ist, ohne das ich etwas eingebe.

    Eingabepuffer leeren (diese beiden Wörter kannst du direkt in die Forensuche eingeben 😉 )!



  • _matze schrieb:

    Eingabepuffer leeren (diese beiden Wörter kannst du direkt in die Forensuche eingeben 😉 )!

    Wenn er nach "Eingabepuffer löschen" sucht findet er gleich diesen Thread, da ich ihn schon zweimal darauf hingewiesen habe.



  • DirkB schrieb:

    _matze schrieb:

    Eingabepuffer leeren (diese beiden Wörter kannst du direkt in die Forensuche eingeben 😉 )!

    Wenn er nach "Eingabepuffer löschen" sucht findet er gleich diesen Thread, da ich ihn schon zweimal darauf hingewiesen habe.

    😃


Anmelden zum Antworten