• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

C programmieren mit XCode - datentypen

  • Ersteller moescream
  • Erstellt am

moescream

Gast
Hallo,

ich bin gerade dabei ein recht simples Programm (in C) für die Uni zu schreiben, allerdings scheitere ich daran, dass XCode offensichtlich den Datentyp "double" nicht erkennt. Ich hab meine Variablen wie üblich als
double dZahl1=0.0
initialisiert, aber das Programm spinnt total und zeigt dann bei der Ausgabe (nachdem den Variablen neue Werte zugewiesen wurden wohlgemerkt!) nur 0.00000 an - und das auch nur, wenn ich in der printf- Zeile %f statt %d schreibe.
Kann es sein, dass man den Datentyp double anders initialisieren muss?
vielen Dank!!! mo
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Ich hab meine Variablen wie üblich als
double dZahl1=0.0
initialisiert, aber das Programm spinnt total und zeigt dann bei der Ausgabe (nachdem den Variablen neue Werte zugewiesen wurden wohlgemerkt!) nur 0.00000 an - und das auch nur, wenn ich in der printf- Zeile %f statt %d schreibe.
Kann es sein, dass man den Datentyp double anders initialisieren muss?
Nein, mit 0.0 initialisieren ist schon OK. Da muss ein anderer Programmierfehler vorliegen. Poste doch mal einen Quellcodeschnippsel.
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Also bei mir gehts

Code:
#include <stdio.h>

int main (int argc, const char * argv[]) {

    double aDouble = 0.0;
    printf("%f \n",aDouble);
    aDouble = 4.2;
    printf("%f \n",aDouble);
    return 0;
}

Ausgabe:
Code:
[Session started at 2007-01-04 08:24:25 +0100.]
0.000000 
4.200000 

DoubleC has exited with status 0.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Hallo,

ich bin gerade dabei ein recht simples Programm (in C) für die Uni zu schreiben,
Du solltest ein minimales Programm posten in dem der Fehler reproduzierbar auftritt und man sagen kann woran es liegt. Deine Fehlerbeschreibung ist vollkommen nutzlos Dir auch nur irgend einen Tip zu Fehlerbehebung geben zu können.
 

Gogul

Uelzener Rambour
Registriert
21.05.04
Beiträge
372
initialisiert, aber das Programm spinnt total und zeigt dann bei der Ausgabe (nachdem den Variablen neue Werte zugewiesen wurden wohlgemerkt!) nur 0.00000 an - und das auch nur, wenn ich in der printf- Zeile %f statt %d schreibe.

das mit %f stimmt, braucht man wenn man kommazahlen (float, double) benutzt!
 

moescream

Gast
Sorry das ich erst jetzt antworten kann, aber ich war die letzten Tage leider vom Internet abgeschnitten. Danke dass gleich so viele von euch auf meine Frage geantwortet haben!! Mittlerweile hab ich das Programm ans Laufen gebracht, der Fehler lag an besagtem %d bzw. korrekt: %f. Das einzige was ich jetzt noch nicht verstehe ist, warum ich nur Dezimalzahlen mit maximal 7 Stellen einlesen/ bzw ausgeben lassen kann. Meines Wissens müsste eine Variable vom Typ Double doch bis zu 15 Stellen nach dem Komma speichern können, das ist doch ihre Eigenschaft, oder?
Ich hab auch mal den Quellcode gepostet, dann könnt ihr euch ein Bild machen. Die Sache ist glaub ich relativ selbsterklärend - die Aufgabe lautete einen Taschenrechner zu "simulieren"...
#include <stdio.h>
int main ()

{

double dZahl1=0.0, dZahl2=0.0, dErgebnis=0.0;
char cOperator;

printf("\n\n****Taschenrechner****\n\nBitte erste Zahl eingeben: ");
scanf("%lf", &dZahl1);

while (cOperator != '+' && cOperator != '-' && cOperator != '*' && cOperator != '/')

{

printf("\nBitte Operator eingeben: ");
scanf(" %c", &cOperator);

}

printf("\nBitte zweite Zahl eingeben: ");
scanf(" %lf", &dZahl2);


switch (cOperator)

{

case '+': dErgebnis = dZahl1 + dZahl2;
break;

case '-': dErgebnis = dZahl1 - dZahl2;
break;

case '*': dErgebnis = dZahl1 * dZahl2;
break;

case '/':

if
(dZahl2==0)

{
printf("\nNicht definiert!\n");
return 1;
}

else

{
dErgebnis = dZahl1 / dZahl2;
}

break;

}

printf("\n%lf %c %lf = %lf", dZahl1, cOperator, dZahl2, dErgebnis);

return 0;
}
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Meines Wissens müsste eine Variable vom Typ Double doch bis zu 15 Stellen nach dem Komma speichern können, das ist doch ihre Eigenschaft, oder?
Nein, ISO C 9899:2001 definiert in <floats.h> für double eine Mindestanzahl von 10 Dezimalstellen. Wieviel Dezimalstellen eine Implementation hat, kannst Du mit dem Makro DBL_DIG herausbekommen. Im Falle von MacOS X sind das 15 Dezimalstellen.

Die Anzahl der ausgegeben Dezimalstellen muß man durch das Ausgabeformat festlegen. Lies Dir die Doku zu printf() durch.