C Programmiercode?

...komplette Frage anzeigen

1 Antwort

if(Geburtsjahr<2000,Geburtstag=1) 

 {       "%d-1900",Geburtsjahr;      

"Alles=((%d2+2)100)/2-%d",Geheimzahl,Geburtstag;


Das hat dein Compiler ehrlich so angenommen und kompiliert? Oder hat der RTE von GF deinen Beitrag verunstaltet?

Die Condition ist bereits falsch, das Komma ist kein logischer Operator, der die beiden Ausdrücke verbinden könnte. Zudem ist der hintere Ausdruck kein Vergleich, sondern eine Zuweisung.

Innerhalb des Rumpfes fehlen ganz offensichtlich die Funktionsaufrufe (printf). Bei dir stehen nur die Formatter-Strings / Argumente.

Rechnen aber tust du nirgendwo.

Ja das hat der Compiler so angenommen.

Was müsste ich statt dem Komma schreiben den ein && geht nicht?

Und wie mache ich aus der Zuweisung einen vergleich.

Und printf soll nicht da stehen da der die Rechnung nicht als Text ausgegeben werden soll, sie soll nur gerechnte werden.

So nimmt der Compiler es aber nicht an: %d-1900,Geburtsjahr;

0
@xTryZ
  1. Wieso sollte ein logisches Und nicht gehen? Welcher boolsche Operator da hinein muss, solltest du selbst am besten wissen, immerhin ist dir der logische Ablauf der Anwendung doch bekannt.
  2. Indem du 2 aufeinanderfolgende Gleichheitszeichen verwendest.
  3. Ja, aber was hast du dir bei diesem Code dann gedacht? Wieso schreibst du Aufzählungen auf?
"%d-1900",Geburtsjahr;

Der erste Ausdruck ist ein String, danach listest du eine Variable des Datentyps Integer auf. Aber nirgendwo wird etwas berechnet.

%d ist nur ein Platzhalterzeichen für formatierte Ausgaben. Es kennzeichnet, dass dort eine Zahl eingefügt werden soll.

Bsp.:

printf("Hier steht die Zahl %d", Geburtsjahr");

Daraufhin wäre die Ausgabe (wenn Geburtsjahr = 1900):

Hier steht die Zahl 1900.
0
@regex9

Danke jetzt stimmt alles muss nur nochmal die Formel durchschauen.

0
@regex9

Nachtrag: Durch die scanf-Funktion wird die Nutzereingabe ausgelesen und der erwartete Wert in die Variable Geburtsjahr hineingespeichert.

scanf("%d",&Geburtsjahr);

Um nun weitere Berechnungen mit der ausgelesenen Eingabe durchzuführen, geht also folgendes:

int jahr = Geburtsjahr - 1900;

War die Eingabe bspw. 1955, dann wird jahr den Wert 55 bekommen.

1

Genau genommen ist so eine if-Bedingung korrekt! (Auch wenn der Fragensteller offensichtlich etwas anderes wollte.)

Der Komma-Operator besagt, dass alle Operanden in JEDEM Fall von Links nach Rechts ausgewertet werden, und das Ergebnis des letzten Ausdrucks genommen wird, wobei die Ergebnisse der vorher ausgewerteten Ausdrücke verworfen werden.

Beispiel:

if (foo(), x < 123, a + b) ...

Dabei werden die ersten beiden Teile in jedem Fall ausgewertet (und evtl. durch den Compiler weg optimiert, sofern dies möglich ist), aber nur der letzte Teil - also "a + b" - als Bedingung ausgewertet.

Das mag erst mal schwachsinnig erscheinen, aber z. B. bei C++ kann man mit diesem "Trick" Funktionen anhand von Bedingungen zur Kompilierzeit deklarieren bzw. unterdrücken.

Alerdings sollte ein Compiler auf einem vernünftigen Warnlevel natürlich meckern, falls keine extra Klammerung erfolgt.

Etwas ähnliches ist es, wenn man anstatt:

if (x < 0) {
puts("ERROR!");
}

... einfach ...

x < 0 && puts("ERROR!");

... schreibt. Das ist zwar kürzer, aber unüblich, und da der Rückgabewert (des gesamten Ausdrucks!) nicht ausgewertet wird, meckert der Compiler normalerweise. :)

4

Was möchtest Du wissen?