• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

C programmieren mit XCode - datentypen

  • Ersteller Ersteller moescream
  • Erstellt am 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
 
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.
 
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.
 
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.
 
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!
 
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;
}
 
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.