2016-06-23 3 views
-2

Warum zeigt mein C-Programm nicht das richtige Alter an? Ich bin auf Codeblock mit Lager Compiler. es zeigt immer 50. Ich habe verloren, warum das wäre. Auch ich habe es hier versucht http://www.tutorialspoint.com/compile_c_online.php. es zeigt das Alter als Null an.c Programm zeigt nicht korrektes Alter

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int age; 
    int currentYear; 
    int birthYear; 

    age = currentYear - birthYear; 
    currentYear = 2016; 
    birthYear = 2000; 

    printf ("You are %d years old. It is now:%d. It began in:%d.", age, currentYear, birthYear); 

    return 0; 
} 
+1

Sie müssen ein Minimum von völlig grundlegenden Programmierung studieren, bevor Sie hier Fragen stellen. SO ist eine Seite für professionelle und enthusiastische Programmierer. – Lundin

Antwort

4
// change the order 

currentYear = 2016; 
birthYear = 2000; 
age = currentYear - birthYear; 

Schlussfolgerungen

  1. Automatische Variablen, die nicht initialisiert werden, sind in eine unbestimmte Phase, so dass Sie für das Alter nicht-sensical Werte bekam.
  2. Auch Ausdrücke sind normalerweise ausgewertet in der Reihenfolge, die sie im Code vorhanden sind. Logischerweise macht es Sinn, age = currentYear - birthYear; am Ende zu setzen.

Referenz

ISO/IEC 9899: 201x 6.79-> 10

Wenn ein Objekt, das die automatische Speicherdauer hat nicht explizit initialisiert, ist ihr Wert unbestimmt.

2

Reorder

age = currentYear - birthYear; 
currentYear = 2016; 
birthYear = 2000; 

zu

currentYear = 2016; 
birthYear = 2000; 
age = currentYear - birthYear; 

Sie nahm zunächst die Differenz von 2 nicht initialisierten Variablen (was schlecht ist, weil das Ergebnis nicht definiert ist) und erst dann legen Sie die 2 Jahre Variablen .

0

Weil Sie nicht zugewiesene Variablen subtrahieren. Sie sollten age = currentYear - birthYear; nach dem Zuweisen von Werten zu currentYear und birthYear platzieren.

Verwandte Themen