Fehler in Programmcode? Was mache ich als Anfänger falsch?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

1) Wie hier bereits geschrieben wurde, du liest die Zahlen falsch ein. Die scanf-Funktion erwartet in deinem Fall eine Referenz der Variable, in welche der Wert aus der Konsole geschrieben werden kann.

int zahl1;
scanf("%d", &zahl1);

2) Arbeite hinsichtlich deines Codes mal mit mehr Leerzeichen, hier z.B. bei der Auflistung der Argumente:

scanf("%d", &auswahl1);

Schmeiße außerdem unnötige Zeilen raus, wie den leeren Kommentar über der Funktion. Alles was du nicht brauchst, kommt raus. So bleibt die Anwendung übersichtlich.

Ein weiteres Beispiel sind die Klammern hier:

return (EXIT_SUCCESS);

Sie sind nicht notwendig und verlängern nur den Text, der zu lesen ist.

3) Einiges an Code könntest du dir übrigens sparen, wenn du die Ausgabe auf der Konsole nur etwas abänderst.

// ...
	
printf("Geben Sie die erste Zahl ein:\n");
int zahl1;
scanf("%d", &zahl1);
		
printf("Geben Sie die zweite Zahl ein:");
int zahl2;
scanf("%d", &zahl2);
	
int ergebnis;

if (auswahl1 == 1) {
	ergebnis = zahl1 + zahl2;
}
else {
	ergebnis = zahl1 - zahl2;
}

// etc. ...

Einfluss auf die Programmnavigation sollte es ja nicht nehmen, da der Nutzer bereits zu Beginn wählt, ob er gerade addieren oder subtrahieren möchte.

4) Es gibt Unterschiede zwischen den Begriffen Initialisierung, Deklaration und Definition. In Kurzform:

int a; // declaration
a = 1; // definition
int b = 1; // initialisation (= declaration + definition)

Bei dir musst du die jeweiligen Variablen nur deklarieren, definiert werden sie später durch scanf oder bei ergebnis im if-else. Sofern jeder Programmzweig die Variablen irgendwann einmal definiert, bevor sie benutzt werden, ist alles in Ordnung.

Auch wenn man in C oft noch Code vorfindet, bei dem die Variablen zu Methodenbeginn deklariert werden, würde ich dir des Weiteren raten, dies erst dann zu tun, wenn die Variable wirklich benötigt wird. So bleibt die Variable in ihrem inhaltlichen Kontext näher, in dem man sie nutzt und oft kann man sich Code-Zeilen dabei sparen, bspw. wenn Deklaration und Definition getrennt sind, obwohl es gar nicht notwendig ist. Ein Beispiel:

int a;
// some other code ...
a = 1;

Kürzer:

// some other code ...
int a = 1;

ThomasM22 
Beitragsersteller
 04.02.2018, 19:50

Wow sehr ausführlich... vielen Dank!

0

Mal generelle Sachen:

Du benötigst nur Zahl 1 und Zahl 2, 3 und 4 kannst du dir schenken. Stattdessen nimmst du auch 1 und 2 im else-Teil

Versuche, englische Bezeichnungen für die Variablen zu nutzen

Es sollte reichen, wenn du ergebnis später deklarierst:

int result = zahl1 +/- zahl2;

ThomasM22 
Beitragsersteller
 04.02.2018, 16:14

Aber woher ist dann klar ob plus oder minus, weil bei der if-else Bedingung würde das dann ja nicht festgemacht werden

0
BrauchJzHilfe  04.02.2018, 16:15
@ThomasM22

int result = zahl1 + zahl2; im if-Teil

int result = zahl1 - zahl2; im else-Teil ;)

0
BrauchJzHilfe  04.02.2018, 16:18
@ThomasM22

Oder so:

printf("Erste Zahl eingeben");
scan...;
printf 2. Zahl;
scan;

if(auswahl == 1) printf ("Das Ergbnis ist..." ,zahl1 + zahl2)
else printf ("Das Ergbnis ist..." ,zahl1 - zahl2)

Du machst ja eigentlich das selbe. Es reicht, wenn du bei Rechnung unterscheidest

0

Der Pointeroperator fehlt...

Es muss &zahl1 sein!

Kannst du den Code evtl. nochmal als Text reinstellen?


ThomasM22 
Beitragsersteller
 04.02.2018, 16:08

#include <stdio.h>

#include <stdlib.h>

/*

 * 

 */

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

  int auswahl1 = 0;

  int zahl1 = 0;

  int zahl2 = 0;

  int zahl3 = 0;

  int zahl4 = 0;

  int ergebnis = 0;

  printf("Was möchten Sie tun?\n\n");

  printf("1. Addieren\n2.Subtrahieren\n");

   

  scanf("%d", &auswahl1);   

  if (auswahl1 == 1){

    printf("Geben Sie die erste Zahl ein welche addiert werden soll:\n");

    scanf("%d",zahl1);

    printf("\n\nWert von zahl1 ist: %d",zahl1);

    printf("Geben Sie die zweite Zahl ein:");

    scanf("%d",zahl2);

     

    ergebnis = zahl1 + zahl2;

  } else {

    printf("Geben Sie die erste Zahl ein welche subtrahiert werden soll:\n");

    scanf("%d",zahl3);

    printf("Geben Sie die zweite Zahl ein:");

    scanf("%d",zahl4);

     

    ergebnis = zahl3 - zahl4;

  }

  printf("Das Ergebnis ist = %d",ergebnis);

  return (EXIT_SUCCESS);

}

0
Destranix  04.02.2018, 16:09
@ThomasM22

Evtl. solltest du die Zahl auch mit einem Pointer einlesen...

0
Destranix  04.02.2018, 16:11
@ThomasM22

Ich glaube du musst den Eingabestream leeren...

Ich prüfe das kurz...

0
Destranix  04.02.2018, 16:13
@Destranix

Schau mal hier

Dort wird erklärt, das du zum einen den Pointeroperator brauchst und zum anderen den Eingabestream leeren musst...

0
Destranix  04.02.2018, 16:16
@Destranix

Aber das reicht noch nicht... Ich prüfe noch...Kenne mich mit C wenig aus...

0
Destranix  04.02.2018, 16:26
@Destranix

Ok..Es ist tatsächlich der fehlende Pointeroperator...Hatte vergessen meine Textkopie zu compilen, weshalb die änderung keinen unterschied gemacht hatte. Jetzt hab ioch es abre ausprobiert un es funktioniert...

0