Programmieren in C

WIng93

Cadet 2nd Year
Dabei seit
Sep. 2019
Beiträge
17
Hallo, ich hoffe mir kann jemand bei einer Aufgabe helfen.
Im folgenden kommt die Aufgabenstellung:

"Text statt Zahl
Schreiben Sie ein Programm, dass einen int einliest. Wenn der Benutzer eine gültige Eingabe macht, soll dies bestätigt und die Zahl wieder ausgegeben werden. Falls der Benutzer aber z.B. einen Buchstaben eingegeben hat, soll eine Fehlermeldung erscheinen."

Mein Ansatz wäre gewesen, dass ich eine if-else Verzweigung mache. Um die gemachte Eingabe zu überprüfen. Der Professor hat jedoch einen anderen Ansatz gewählt, den ich leider nicht nachvollziehen kann. Hab es schon gegoogelt gehabt aber den Syntax so nicht gefunden (da ich nicht weiss, was das genau ist)

Programm:

#include<stdio.h>
int main( void )
{
int zahl;
int scanfKontrolle;
printf("Bitte ganze Zahl eingeben: ");
scanfKontrolle = scanf("%d", &zahl );
scanfKontrolle ?
printf("zahl = %d\n", zahl )
:
printf("Fehler bei Eingabe\n");

return 0;
}

Übrigens läuft das Programm auch nicht. Hab es schon versucht in Codeblocks zum laufen zu bringen. Ich persönlich würde auf eine Verzweigung zurück greifen (switch-case oder if-else) aber falls solch eine Frage in der Klausur dran kommt, sollte ich das zumindest verstanden haben.
Danke für jede Hilfe im voraus.
 

Nilson

Fleet Admiral
Dabei seit
Dez. 2008
Beiträge
18.534
1. Code in [CODE][/CODE] packen
2. Google mal Ternärer-Operator
 

RalphS

Lt. Commander
Dabei seit
Feb. 2015
Beiträge
1.478
In .c-Datei kopiert, kompiliert (clang) und ausgeführt: Tut wie beschrieben.

Find das ja mit dem ternary ein bißchen zweckentfremdet, aber sei's drum. Zum Schauen daß es das gibt.... reicht es wohl. Aber eigentlich ist das für Zuweisungen oder anderweitige Weiterverwendung gedacht, nicht für void irgendwas.

Plus: Hausaufgaben und so.
 

WIng93

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Sep. 2019
Beiträge
17
Wird dieser Operator oft angewandt bzw. benötigt man ihn oder kann man ihn stattdessen immer durch eine switch-case oder if-else Verzweigung ersetzen?

Ich war jetzt auf 3 Seiten und hab in mein Skript und 2 Büchern geguckt leider wird das nur flüchtig oder sogar gar nicht behandelt. Daher frage ich mich ob er auch beim Programmieren seine Anwendung findet oder es nur ein Operator ist den man mal gesehen haben sollte.

In den ganzen Programmen die ich bis jetzt programmiert oder im Internet gesehen habe um mir C beizubringen hatte ich den Tenärer-Operator bis jetzt noch nicht gesehen gehabt.
 

simpsonsfan

Commander
Dabei seit
Feb. 2008
Beiträge
2.850
Du kannst es immer irgendwie durch if-else ersetzen. Man sollte diese Sytnax schon kennen.
Der erste Link bei Google ist bei mir dieser, der bringt es ganz gut auf den Punkt.
Wobei ich sagen muss, in dem Code da oben hätte ich auch lieber if-else geschrieben. Wenn es nicht mehr in eine Zeile packt, macht es die Kurzschreibweise mit dem ternären Operator nicht mehr übersichtlicher.
Und ein Unterschied zwischen einem if-else-Konstrukt und dem ternären Operator ist, dass dieser einen Rückgabewert liefert, eine if-Kontrollstruktur mWn hingegen nicht.
 

BeBur

Lt. Commander
Dabei seit
Nov. 2018
Beiträge
1.145
Wird dieser Operator oft angewandt bzw. benötigt man ihn oder kann man ihn stattdessen immer durch eine switch-case oder if-else Verzweigung ersetzen?
Du kannst alle Kontrollstrukturen durch jeweils eine andere ersetzen. Man nimmt meistens das, was sich inhaltlich anbietet. Den Ternären Operator formatiert man so aber nicht, das ist grausam.
Code:
isCool(myInput) ? coolStuff(myInput) : warmStuff(myInput)
Wobei ich sagen muss, in dem Code da oben hätte ich auch lieber if-else geschrieben. Wenn es nicht mehr in eine Zeile packt, macht es die Kurzschreibweise mit dem ternären Operator nicht mehr übersichtlicher.
This. Der ist für ganz kurze Verzweigungen.

Ich glaube die Hauptanwendung ist für 'inline'-verzweigungen.
Meistens ist es böse, mehrere Ausdrücke zu schachteln, aber manchmal bietet es sich einfach an.
Ich verwende ihn oft bei Ruby für mapping, das sieht dann so aus:
Code:
(1..100).map{|n| n.odd? ? "odd" : "even"}
Das gibt ein Array mit 100 Elementen (Strings) aus, abwechselnd "odd" und "even".
 
Zuletzt bearbeitet: (es fehlte ein fragezeichen)

RalphS

Lt. Commander
Dabei seit
Feb. 2015
Beiträge
1.478
Ternary ist eigentlich einfach nur eine bedingte Zuweisung und dient der Vermeidung unnötiger Redundanz und damit Fehleranfälligkeit.

In Worten: Je nachdem ob Bedingung wahr oder falsch ist, soll X einen oder einen anderen Wert annehmen (funktionaler Ansatz).
Prozedural wäre: wenn Bedingung wahr ist, weise X einen Wert zu, anderenfalls weise X einen anderen Wert zu.

Noch ein anderer Ansatz kann sein: X hat unbedingt einen festen Wert. Wenn Bedingung B greift, bekommt es einen anderen.

Bei C kommt es auch immer so ein bissel drauf an. Wann weise ich wie Speicher zu? Ternary garantiert mir, daß meine angelegte Datenstruktur jederzeit einen bekannten Wert hat, auch wenn ich diesen eigentlich nur unter bestimmten Umständen kenne.
Int i; if... then i=0 ... und ich hab hinterher beim Zugriff auf i eine Zugriffsverletzung.
 

WIng93

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Sep. 2019
Beiträge
17
Ich danke euch alle für eure hilfreichen Antworten. Ich habe das Prinzip des Operators soweit verstanden und auch wie man ihn anwendet.
Ich werde wahrscheinlich aber eher Verzweigungen wählen, wenn ich auf so eine Aufgabenstellung beim Programmieren nochmal stoßen werde.

Danke an alle nochnal
 

feynman

Lt. Junior Grade
Dabei seit
Okt. 2010
Beiträge
447
Der ternary Operator wird selten richtig verwendet und wie simpsonfan bereits andeutet ist das Beispiel hier besonders schlecht, da es die Zuweisung gar nicht verwendet. Es wird sogar inzwischen häufig empfohlen diesen Operator nicht zu verwenden um die Lesbarkeit des Codes zu verbessern: Sonar: The ternary operator should not be used
Jo, viele Coding-Standards, die z.B. im sicherheitsrelevanten Umfeld verwendet werden, verbieten den ternary operator.
 
Top