2016-05-21 12 views
-3

Ich schreibe ein einfaches Programm in C, versuche, mir die Sprache zum ersten Mal beizubringen und auch zu lernen, mein (Mac) Terminal zum ersten Mal zu benutzen. Ich erhalte jedoch immer einen Segmentierungsfehler, wenn ich versuche, eine Variable (ssn) in scanf() einzugeben, die gespeichert werden soll. Ich änderte die Variable von einem int zu einem langen und hoffte, das Problem zu lösen (was ich nachsah und dachte, dass es mit Speicherverfügbarkeit/-zugriff zu tun hat), aber ohne Erfolg. Ich würde wirklich einige Führung schätzen, danke! Mein Code unten:Segmentation Fault 11 mit C im Terminal

/* A short example program from cs449 C Programming Text */ 
/* Section 4.13 */ 
/* Exercise 4-1 */ 

/********************************************************** 
*               * 
*  Write a program to print a name, SSN, and DOB  * 
*               * 
**********************************************************/ 

#include <stdio.h> 
int main() 
{ 
    char name[20];  /* an array of char used to hold a name */ 
    long ssn;   /* an integer for holding a 9 dig ssn */ 
    long dob;   /* an integer for holding a date of birth */ 

    /* for the name */ 
    printf("Please enter your name: "); 
    scanf("%s", name); 

    /* for the SSN */ 
    printf("Please enter your ssn: "); 
    scanf("%ld", ssn); 

    /* for the date of birth */ 
    printf("Please enter your date of birth:\n"); 
    printf("Ex. monthdayyear or 041293\n"); 
    scanf("%ld", dob); 

    /* final print of user-entered information */ 
    printf("You are %s born on %d and your SSN is %d", name, dob, ssn); 

    /* remember to always return 0 at the end of a main funct! */ 
    return(0); 
} 
+0

@BLUEPIXY Dank für diesen Fehler zu kontrollieren! – Her

+0

@BLUEPIXY, gehen Sie voran und kopieren Sie meine Antwort auf die Kommentare :-) – ForceBru

+0

@BLUEPIXY vielen Dank! – Her

Antwort

0

Sie benötigen die folgenden:

scanf("%ld", &ssn); 

Und dann

scanf("%ld", &dob); 

Dies liegt daran, Sie scanf wollen die Zahlen in Ihre Variablen lesen, Sie wollen sie durch diese Funktion geändert werden, so geben Sie es ein Zeiger auf diese Variablen.


Auch solltest du die Zahlen richtig bessere Leistung, mit %ld statt %d:

printf("You are %s born on %ld and your SSN is %ld", name, dob, ssn); 
+0

danke! muss ich das auch für die String-Eingabe tun? -> scanf ("% s", Name); – Her

+0

@Her, nein, nicht, 'scanf' sieht' name' bereits als _a pointer_ zum ersten Element von 'name'. – ForceBru

+0

@Her: da 'name' als Array deklariert ist, ist' name' bereits ein Zeiger auf den Anfang des Arrays, so dass Sie das '&' nicht benötigen. Arrays sind in C witzig und eng mit Zeigern auf seltsame Art und Weise verknüpft. –