noob@Taschenrechner



  • ich habe erst im lauf dieser woche mit c angefangen und wollte nur mal nen tacshenrechner programmieren (jeder fängt mal klein an^^) aber er funktioniert nicht. irgendwie überspringt er glaub ich meinen switch.

    #include <stdio.h>
    
    int main ()
    
    {
    
    int zahl1;
    int zahl2;
    int ergebnis;
    char zeichen;
    
    	printf ("Bitte geben Sie Ihre erste Zahl ein: \n");
    	scanf  ("%d", &zahl1);
    	printf ("Nun wählen Sie bitte den zeichenerator aus -> 1:+  2:-  3:*  4:/  \n");
    	scanf  ("%d", &zeichen);
    	printf ("Bitte geben Sie Ihre zweite Zahl ein: \n");
    	scanf  ("%d", &zahl2);
    
    	switch (zeichen)
    	{
    		case '1': {printf ("Ihre Aufgabe lautet somit %d %c %d = %d\n", zahl1, zeichen, zahl2, ergebnis);
    			break;}
    		case '2': {printf ("Ihre Aufgabe lautet somit %d %c %d = %d\n", zahl1, zeichen, zahl2, ergebnis);
    			break;}
    		case '3': {printf ("Ihre Aufgabe lautet somit %d %c %d = %d\n", zahl1, zeichen, zahl2, ergebnis);
    			break;}
    		case '4': {printf ("Ihre Aufgabe lautet somit %d %c %d = %d\n", zahl1, zeichen, zahl2, ergebnis);
    			break;}
    
    	}	
    
    	return 0;
    
    }
    

    danke für die Hilfe 🙂



  • Hmm... wo rechnet denn dein Taschenrechner?

    Ach ja und die geschweiften Klammern in den switch Blöcken kannst du dir getrost sparen. getchar() könnte verhindern, dass dein Program sofort beendet wird.



  • er.... da ist was dran.... erm kannst du ihn dazu bringen? ich weiß noch nicht wirklich wie



  • Du liesst mit scanf("%d", &zeichen); eine Zahl ein. Wenn Du z.B. eine 1 eingibst, steht auch eine 1 in zeichen drin.
    Mit case '1'(im switch-Teil) überpüfst Du dann, ob das Zeichen '1' in zeichen steht. '1' hat aber den ASCII Code 49 und damit vergleichst Du 1 mit 49, was natürlich unwahr ist.
    Wenn Du zeichen mit einem Zeichen vergleichen willst, musst Du auch dafür sorgen, dass Du ein Zeichen einlisst und keine Zahl.



  • Zum Rechnen: Bsp:

    case '1': printf ("Ihre Aufgabe lautet somit %d %c %d = %d\n", zahl1, zeichen, zahl2, zahl1+zahl2);
                break;
    


  • Asgard schrieb:

    case '1': printf ("Ihre Aufgabe lautet somit %d %c %d = %d\n", zahl1, zeichen, zahl2, zahl1+zahl2);
                break;
    

    oki schonmal ein guter tip. aber was ist wenn jemand ein - anstatt + eingibt, dann funtzt der code oben nicht mehr oder?



  • Naja, Du musst ja nur die Zeilen weiter oben anpassen...also bei minus schreibst Du dann halt zahl1-zahl1, bei mal, zahl1*zahl2 usw.



  • dann muss ich 7463852645823 millionen cases machen oder nicht? gibts nicht die möglichkeit das sich die rechnung aus den variablen ergibt?

    z.b ich lese folgendes ein

    zahl 50
    zeichen +
    zahl2 100

    so wenn ich die werte eingelesen hab muss sich die aufgabe doch irgendwie von selbst erledigen oder so. hätte man z.B. ein * eingegeben rechnert er halt nicht + sondern mal. also zahl zeichen zahl2 = ergebnis oder so? 😕



  • Also wenn du wirklich an der ursprünglichen Fassung deines Taschenrechners festhalten willst und die Rechenart an Hand der Eingabe von 1/2/3 oder 4(Das willst du doch, oder?) bestimmst, musst du zeichen als int deklarieren und ohne ' ' switchen, da es sich um eine zahl handelt. Dann kannst du vor jede Zeile, die ein Ergebnis mit printf ausgibt noch die entsprechende Rechnung(zb ergebnis = zahl1 + zahl2, bei addition) anstellen und fertig is der Salat. Dann kannst du jedoch natürlich nicht mehr mit %c das Rechenzeichen ausgeben, aber da du für jede Rechenart sowieso eine eigene printf anweisung hast, kannst du auch gleich das Rechenzeichen in den string setzen.



  • Switch doch einfach die Rechenzeichen und nimm die EIngaben um das Ergebnis auszurechnen 🤡



  • Einfacher isses natürlich so, aber ich meinte ja, wenn er bei seinem Ansatz bleiben will... Sonst können wir ihm auch gleich den Link zur fertigen Taschenrechner-Source geben. 😉



  • Tach, hier noch mal alles zusammen.

    #include <stdio.h>
    
    int main ()
    {
    
    	int zahl1;
    	int zahl2;
    	int zeichen;
    
    	printf ("Bitte geben Sie Ihre erste Zahl ein: \n");
    	scanf ("%d", &zahl1);
    	printf ("Nun waehlen Sie bitte den Zeichenerator aus -> 1:+  2:-  3:*  4:/  \n");
    	scanf ("%d", &zeichen);
    	printf ("Bitte geben Sie Ihre zweite Zahl ein: \n");
    	scanf ("%d", &zahl2);
    
    	switch (zeichen)
    	{
    	case 1:
    		printf ("Ihre Aufgabe lautet somit %d + %d = %d\n", zahl1,
    			zahl2, zahl1 + zahl2);
    		break;
    
    	case 2:
    		printf ("Ihre Aufgabe lautet somit %d - %d = %d\n", zahl1,
    			zahl2, zahl1 - zahl2);
    		break;
    
    	case 3:
    		printf ("Ihre Aufgabe lautet somit %d * %d = %d\n", zahl1,
    			zahl2, zahl1 * zahl2);
    		break;
    
    	case 4:
    		printf ("Ihre Aufgabe lautet somit %d / %d = %d\n", zahl1,
    			zahl2, zahl1 / zahl2);
    		break;
    	}
    
    	return 0;
    }
    

Anmelden zum Antworten