2016-07-19 4 views
-4

Hier ist mein Code:Mit printf und scanf-Funktionen für die Doppel in C

#include <stdio.h> 

int main (void) 
{ 
double itemCost; 
double paidMoney; 
int changeDue; 

printf("How much does the item cost: "); 
scanf("%lf", itemCost); 

printf("How much did the coustomer pay: "); 
scanf("%lf", paidMoney); 

changeDue = ((itemCost - paidMoney) * 100);  

printf("Change due in pennies is: %i", changeDue); 
} 

Das Programm wird eine einfache Eingaben wie 9,5, die 9,50 £ deshalb haben repräsentiert ich doppelt bin mit meinen Werten zu speichern. Auch printf und scanf fördert floats zu doubles, so dass es nicht wirklich wichtig ist.

Wenn jedoch mit gcc kompilieren, erhalte ich eine Fehlermeldung sagen:

cashReturn.c:10:15: warning: format specifies type 'double *' but the argument has type 'double' [-Wformat] 

Was bedeuten diese Fehler bedeuten und warum es Aufspringen?

+6

Sie brauchen einen Zeiger auf übergeben, wo Sie den analysierten Wert wollen gespeichert: 'scanf ('% lf', & itemCost)'. andernfalls übergibt man den VALUE-Wert in diesem Varable, der zufälliger Müll sein wird, weil er nur deklariert, nicht initialisiert wurde. –

+0

Hinweis: besser zu runden als truncate: 'int changeDue = rund ((itemCost - paidMoney) * 100);' Andere Verbesserungen ebenfalls möglich. – chux

Antwort

3

Sie müssen einen Zeiger auf eine Variable des angegebenen Typs übergeben, wenn Sie scanf verwenden.

double itemCost; 
double paidMoney; 
int changeDue; 

printf("How much does the item cost: "); 
scanf("%lf", &itemCost); 
// ----------^ 

printf("How much did the coustomer pay: "); 
scanf("%lf", &paidMoney); 
// ----------^ 

Auch Sie vernachlässigen den Rückgabewert von scanf zu überprüfen. Dies ist nicht optional!scanf gibt die Anzahl der erfolgreich zugewiesenen Elemente zurück. Wenn N zurückgegeben wird, Sie jedoch M Variablen angegeben haben, die zugewiesen werden sollen, werden die letzten (N-M) Variablen nicht zugewiesen (und in Ihrem Fall nicht initialisiert).

versuchen, etwas wie folgt aus:

for (;;) { 
    printf("How much did the coustomer pay: "); 
    if (scanf("%lf", &paidMoney) == 1) 
     break; // success 
    printf("Invalid input!\n"); 
}