Arbeiten mit Booleschen Ausdrücken

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Arbeiten mit Booleschen Ausdrücken

Beitrag von schlafmütze » Mi Mär 11, 2009 6:54 pm

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.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Arbeiten mit Booleschen Ausdrücken

Beitrag von nufan » Mi Mär 11, 2009 7:08 pm

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.

schlafmütze
Beiträge: 67
Registriert: Mi Mär 11, 2009 6:48 pm

Re: Arbeiten mit Booleschen Ausdrücken

Beitrag von schlafmütze » Mi Mär 11, 2009 7:35 pm

Klasse Erklärung Danke.

Antworten