char z;
stellt nur den Speicherplatz für ein Zeichen bereit
scanf("%s\n", &z);
liest aber kein Einzelzeichen ein, sondern eine Zeichenkette. Damit schreibst Du in andere Speicherbereiche. Effekt undefinierbar.
Selbst ein Einzelzeichen würde zwei Byte belegen ‚-‘ und ‚\n‘.
Also immer sicherstellen, dass eingelesene Inhalte nicht größer sind als der bereitgestellte Speicherplatz. Über die Wahl der Einlesefunktion kann dieses erzwungen werden, weil die Funktion nur ein Zeichen liest (z.B. fgetc, getchar, getch) oder eine Längenschränkung enthält (z.B. über Formatstring, fgets)
if ( z == ‚+‘)
Loesung = x + y;
if ( z == ‚-‘)
Loesung = x - y;
if ( z == ‚*‘)
Loesung = x * y;
if ( z == ‚/‘)
Loesung = x / y;
Fehlerfrei aber nicht perfekt, da das Durchlaufen aller Vergleiche unnütz ist. Besser else verwenden oder switch und exit.
Sehr unsauber ist dagegen, dass ein 5. Fall (Keines der Zeichen) unberücksichtigt bleibt: Fehlermeldung fehlt und stattdessen wird ein evtl. nicht gesetzter Wert für Loesung genutzt.
printf(„Loesung: %f\n“, Loesung);
return 0;
}
Passt.
wieso kann ich hier den Inhalt der Variablen z nicht mit den
angegebenen Zeichen vergleichen?
Folgefehler des ersten fatalen Bugs.
Liegt mein Fehler im
Adress-Operator, muss ich mit Zeigern arbeiten? Ich komm echt
nicht mehr weiter.
Jein, wenn Du’s z.B. mit char z[2] und entsprechend richtiger Adressierung realisiert hättest, wäre das Problem nicht aufgetreten.
Wäre um eine Antwort sehr dankbar.
Bitte sehr. War was für mein Langzeitgedächtnis.
Ciao, Allesquatsch