Seite 1 von 1

Arbeiten mit Booleschen Ausdrücken

Verfasst: Mi Mär 11, 2009 6:54 pm
von schlafmütze
Hi Proggen.org

Ich hab eine Frage und zwar bei diesen Programm:

Code: Alles auswählen

#include<stdio.h>

int main()

{
  int jahr;
  int a, b, c, schalt;

  
   printf("jahr: ");
   scanf("%d",jahr);
  

   a = jahr%4 == 0;
   b = jahr%100 == 0;
   c = jahr%400 == 0;

   schalt = a && !b || c;
  
   if (schalt)
   {
     printf("%4d ist ein schaltjahr\n", jahr);
   }
  else
   {
     printf("%4d ist kein schaltjahr\n",jahr);
   }
  (jahr > 0);

return 0;
}
Bei compiliren dieses Programms gibt es keine Probleme aber sobald ich was in der Konsole eingebe kommt eine Fehlermeldung die heißt :

Code: Alles auswählen

Segmentation fault
Kann mir jemand von euch vielleicht helfen ?

mfg schlafmütze.

Re: Arbeiten mit Booleschen Ausdrücken

Verfasst: Mi Mär 11, 2009 7:08 pm
von nufan
Hallo und willkommen im Forum :)

Die Variable "jahr" ist ein Integer, der am Anfang keinen Wert zugewiesen bekommt. scanf liest einen Wert ein und schreibt ihn in die Adresse die du übergibst. Du übergibst jedoch den Wert von "jahr" (dieser ist undefiniert = Speichermüll!) und dorthin wird der eingelesene Wert geschrieben. Das ist natürlich nicht gut, da du möglicherweise Speicher überschriebst, der gerade verwendet wird. Um an die Adresse einer Variable zu kommen musst du den Adressoperator & verwenden. Also

Code: Alles auswählen

scanf("%d", &jahr);
Aber was macht dieser Ausdruck:

Code: Alles auswählen

(jahr > 0);
? Willst du prüfen ob eine Jahreszahl größer als 0 eingegeben wurde? Dann musst du eine if-Abfrage nach dem scanf schreiben, da sonst trotzdem mit dem negativen Wert gerechnet wird.

Außerdem ist "schalt" keine Variable vom Typ "bool" sondern "int".

EDIT: Vergessen zu sagen:
Es geht aber natürlich mit einem "int" auch.

Re: Arbeiten mit Booleschen Ausdrücken

Verfasst: Mi Mär 11, 2009 7:35 pm
von schlafmütze
Klasse Erklärung Danke.