2016-11-10 3 views
0

Ich folge zusammen mit einem Buch, das ich auf C lese und fragte mich, ob jemand mir mit einem Problem helfen könnte, das ich habe. Meine Funktion muss dem Benutzer erlauben, eine Gleitkommazahl einzugeben, und diese Nummer muss dann in der Variablen gespeichert werden, auf die der Zeigerparameter zeigt. Wenn ich den Wert in main drucke, bekomme ich Nullen. Die Funktion darf nur true oder false zurückgeben, damit ich den Wert nicht zurückgeben kann. Hier ist mein Code:Wie man Variable mit Zeigervariable speichert

Nur auf der Suche nach Anleitung, danke!

#include <stdio.h> 
#include <stdbool.h> 
#pragma warning(disable: 4996) 




bool getDouble(double *pNumber); 


int main(void) 
{ 
    double d1 = 0; 
    double *pNumber; 
    bool i; 


    pNumber = &d1; 
    i = getDouble(pNumber); 
    printf("%f", *pNumber); 



} 


/* 
* Function: getDouble()Parameter: double *pNumber: pointer 
* to a variable that is filled in by the user input, if 
* valid 
* Return Value: bool: true if the user entered a valid 
* floating-point number, false otherwise 
* Description: This function gets a floating-point number 
* from the user. If the user enters a valid floating-point 
* number, the value is put into the variable pointed to by 
* the parameter and true is returned. If the user-entered 
* value is not valid, false is returned. 
*/ 
bool getDouble(double *pNumber) 
{ 

    /* the array is 121 bytes in size; we'll see in a later lecture how we can improve this code */ 
    char record[121] = { 0 }; /* record stores the string */ 
    double number = 0.0; 
    /* NOTE to student: indent and brace this function consistent with your others */ 
    /* use fgets() to get a string from the keyboard */ 
    fgets(record, 121, stdin); 
    /* extract the number from the string; sscanf() returns a number 
    * corresponding with the number of items it found in the string */ 
    if (sscanf_s(record, "%lf", &number) != 1) 
    { 
     /* if the user did not enter a number recognizable by 
     * the system, return false */ 
     return false; 
    } 
    pNumber = &number; /* this is where i think i am messing up */ 
    return true; 
} 

Antwort

1

pNumber = &number; speichert nur die Adresse Ihres lokalen Variablen im Parameter Ihrer Funktion (das ist auch eine lokale Variable)

Was Sie tun möchten, ist: *pNumber = number;

BTW können Sie direkt tun: if (sscanf_s(record, "%lf", pNumber) != 1)

und Ihre main stark vereinfacht werden könnte und sicherer gemacht:

int main(void) 
{ 
    double d1; 

    pNumber = &d1; 
    if (getDouble(&d1)) 
    { 
     printf("%lf", d1); 
    } 
} 

Fixes:

  • unnötige temporäre Variablen
  • falsches Format den doppelten
  • keinen Test, um zu sehen zu drucken, wenn der Eingang gültig ist
Verwandte Themen