2016-04-04 6 views
0

Ich habe eine Zuweisung für C Anfänger Klasse: Ich soll eine Struktur erstellen, die eine Variable (benannter Wert) und einen Zeiger auf die Liste hat. Ich soll den Benutzer für 5 Werte als Eingabe auffordern und sie in der verknüpften Liste speichern. Dann drucke die Liste aus. Ich kann nicht herausfinden, wie man Eingaben in die Liste speichert. Ich habe es geschafft, ein Programm zu schreiben, in dem ich die 5 Werte initialisiere. Aber ich weiß nicht, wie man Eingaben akzeptiert und in der Liste speichert.Benutzereingaben in verkettete Liste speichern - C

Hier ist das Arbeitsprogramm, in dem ich die Werte initialisieren:

#include <stdio.h> 

struct list 
{ 
    double value; 
    struct list *nextVal; 
}; 

int main() 
{ 
    struct list v1 = {10}; 
    struct list v2 = {17.97}; 
    struct list v3 = {166}; 
    struct list v4 = {2}; 
    struct list v5 = {387.55}; 
    struct list *first; 

    first = &v1; 
    v1.nextVal = &v2; 
    v2.nextVal = &v3; 
    v3.nextVal = &v4; 
    v4.nextVal = &v5; 
    v5.nextVal = NULL; 

    printf("All the values are: %.2f, %.2f, %.2f, %.2f, %.2f.", 
    first->value,v1.nextVal->value,v2.nextVal->value, 
    v3.nextVal->value,v4.nextVal->value); 

    return 0; 
} 

Hier ist ein Programm, in dem ich versuchte, eine Benutzereingabe bekommen und dass in der Liste zu speichern. (Ich habe nur 2 Werte anstelle von 5, weil es einfacher ist, damit zu arbeiten, wenn es versucht, es zu arbeiten.) Wenn ich dieses Programm kompiliere, erhalte ich keine Fehler. Wenn ich es ausführe, werde ich richtig aufgefordert, die zwei Eingabewerte einzugeben; Wenn die Ausgabe, die das Programm druckt, nur 0 für beide Werte schreibt. Meine Annahme ist, dass ich den Wert in der Liste falsch ablege - weil ich nicht weiß, wie es tatsächlich gemacht wird. (Ich kann keine Informationen in meinem Lehrbuch oder online finden.) Letzte Nacht hat jemand eine andere Frage kommentiert. Ich musste versuchen, Breakpoint zu benutzen, um genau herauszufinden, wo das Problem liegt - ich habe versucht, es herauszufinden, aber don Ich weiß noch nicht, wie ich das machen soll. (Ich gehe davon aus, dass es etwas sehr Einfaches ist - aber überall, wo ich online schaute, erklären die Leute es auf eine Weise, die so aussieht, als müsste ich wissen, wovon sie reden - was ich nicht tue - und ehrlich gesagt, selbst wenn ich Ich könnte es herausfinden, aber ich weiß immer noch nicht, was ich mit diesen Informationen machen soll, da ich einfach keine Informationen darüber finde, wie ich Benutzereingaben in einer verknüpften Liste speichern kann.) Wie auch immer, hier ist mein Testprogramm, das den Anforderungen entspricht und ausgeführt wird aber gibt mir 0 für beide Endwerte:

#include <stdio.h> 

struct list 
{ 
    double value; 
    struct list *nextVal; 
}; 

int main() 
{ 
    double val1,val2; 

    printf("Please enter a number: "); 
    scanf("%f",&val1); 
    printf("Please enter a number: "); 
    scanf("%f",&val2); 

    struct list v1 = {val1}; 
    struct list v2 = {val2}; 
    struct list *first; 

    first = &v1; 
    v1.nextVal = &v2; 
    v2.nextVal = NULL; 
    printf("The two values entered are %.2f and %.2f.", 
    first->value,v1.nextVal->value); 

    return 0; 
} 

Vielen Dank im Voraus! Und ich bin wirklich ein Anfänger - also auch wenn du etwas superleichtes vorschlägst - ich habe vielleicht keine Ahnung was es ist..so bitte erkläre es! Vielen Dank!

+0

Kennen Sie über Funktion malloc? –

Antwort

1
scanf("%f",&val1); 

%f erfordert eine float variabel, aber die gegebene Variable ist ein double. Verwenden Sie %lf für double.

scanf("%lf",&val1); 

Ihr Compiler Sie, dass eine Verwarnung haben sollte und Sie sollten immer diejenigen ihnen Beachtung schenken und lösen:

warning: format ‘%f’ expects argument of type ‘float *’, but argument 2 has type ‘double *’ [-Wformat=] 
scanf("%f",&val1); 

Ein paar zusätzliche Ratschläge, obwohl sie Ihre Frage nicht direkt adressieren:

  • Überprüfen Sie immer die Funktionsrückgabewerte. Überprüfen Sie speziell scanf, um sicherzustellen, dass die erwartete Eingabe analysiert wurde. Der Code wie er ist, schlägt fehl, wenn der Benutzer etwas unerwartetes eingibt.
  • Teilen Sie Ihren Code in Funktionen auf. Nehmen Sie eine separate insert-Funktion vor, um Elemente zur verknüpften Liste hinzuzufügen.
  • Verwenden Sie Schleifen, in denen Sie Code wiederholen müssen. Wie für die scanf Anrufe. Auf diese Weise kann es leicht erweitert werden, wenn Sie mehr Eingaben benötigen.
+0

Vielen Dank. Ich habe das korrigiert und es funktioniert. Mein Compiler hat mich nicht gewarnt - weshalb ich so verwirrt war, was das Problem war. –

+0

Welchen Compiler benutzen Sie? Die meisten Compiler haben eine Option, um Warnstufen anzuzeigen. Schlagen Sie vor, wie Sie das tun und aktivieren Sie es für Ihre Builds. – kaylum

0

Versuchen Sie, mit Warnungen auf etc. zu kompilieren. Ich verwende mindestens ...

gcc -Wall -pedantic -std=c11 

Version Arbeiten

include <stdio.h> 

struct list 
{ 
    double value; 
    struct list *nextVal; 
}; 

int main() 
{ 
    double val1,val2; 

    printf("Please enter a number: "); 
    scanf("%lf",&val1); 
    printf("Please enter a number: "); 
    scanf("%lf",&val2); 

    struct list v1 = {val1}; 
    struct list v2 = {val2}; 
    struct list *first; 

    first = &v1; 
    v1.nextVal = &v2; 
    v2.nextVal = NULL; 
    printf("The two values entered are %.2f and %.2f.", 
     first->value,v1.nextVal->value); 

    return 0; 
} 

Sie wurden zitiert scannen und versuchen, es zu einem Doppel zuzuweisen. Ein guter Compiler würde Ihnen eine Warnung geben.

scanf.c:14:14: warning: format specifies type 'float *' but the argument has type 'double *' [-Wformat] 
    scanf("%f",&val1); 
     ~~ ^~~~~ 
     %lf 
scanf.c:16:14: warning: format specifies type 'float *' but the argument has type 'double *' [-Wformat] 
    scanf("%f",&val2); 
     ~~ ^~~~~ 
     %lf