2016-09-29 6 views
-1

Ich habe diesen Code, wo der Benutzer aufgefordert wird, eine Nummer einzugeben, um das Programm wissen, wie groß meine verknüpfte Liste sein wird, dann die nächsten Benutzereingaben werden die Daten in die Links geschoben werden. Ich habe keine Probleme mit Ganzzahlen, aber aus welchen Gründen auch immer, wenn ich Dezimalpunkte verwende, zum Beispiel 32.22, stoppt das Programm die normale Ausführung und behält die Zahlen auf der linken Seite der Zahl mit Dezimalpunkt und fügt diese Zahl dem Rest hinzu der Knoten. FYI, ich bin in Visual Studio Express Entwicklung 2012.verknüpfte Liste Eingabetyp Probleme

Für eine gute Ausführung, 3 wie die Anzahl des Bezugs Verwendung und Ziffern 1, 2 bzw. 3, erhalte ich die folgende Ausgabe:

How many numbers? 
3 
Please enter number 
1 
List is: 1 
Please enter number 
2 
List is: 2 1 
Please enter number 
3 
List is: 3 2 1 
Press any key to continue . . . _ 

für einen schlechten Ausgang dieses erhalte ich:

How many numbers? 
3 
Please enter number 
1 
List is: 1 
Please enter number 
23.23 
List is: 23 1 
Please enter number 
List is: 23 23 1 
Press any key to continue . . . _ 

Hier ist mein Code:

#include <iostream> 
#include <stdlib.h> 
#include <stdio.h> 

using std::cout; 
using std::cin; 
using std::endl; 

struct Node 
{ 
    double data; 
    Node* next; 
    }; 

struct Node* head; // global variable 
void Insert(double x) 
{ 
    Node* temp = new Node; 
    temp->data = x; 
    temp->next = NULL; 
    if(head != NULL) temp->next = head; 
    head = temp; 
} 

void Print() 
{ 
Node* temp = head; 
printf("List is: "); 
while(temp != NULL) 
{ 
    printf(" %d", temp->data); 
    temp = temp->next; 
} 
printf("\n"); 
} 
int main() 
{ 

head = NULL; // empty list 
printf("How many numbers?\n"); 
int n, i; 
double x; 
scanf_s("%d", &n); 
for(i = 0; i < n; i++) 
{ 
    printf("Please enter number \n"); 
    scanf_s("%d", &x); 
    Insert(x); 
    Print(); 
} 
system("PAUSE"); 
    return 0; 

} 

Irgendwelche Tipps oder vorschlagen Ionen auf diesem? Was mich nervt ist, dass der Code für Ganzzahlen gut funktioniert, aber sobald ich anfange, Dezimalstellen einzuführen, wird es verrückt. Ich habe versucht, die Benutzereingaben sowie den Datentyp in meiner Node-Struktur sowohl als Typ int und Typ double zu werfen und ich erhalte die gleichen Ergebnisse mit beiden.

+0

'scanf_s ("% d", &x);' 'sollte scanf_s ("% lf" sein, &x);' ' –

+1

scanf'is ** nicht sicher Typ ** Dennoch, wenn Sie mit g ++ Sie„Warnung erhalten kompilieren.: format '% d' erwartet das Argument vom Typ 'int', aber Argument 2 hat den Typ 'double' ". Anstatt die Formatangabe zu fixieren, entfernen Sie alle C-Ebenen und verwenden' cin' und 'cout'. –

Antwort

0
scanf_s("%d", &x); 

sollte

scanf_s("%lf", &x); 

%d ist in einer Dezimalzahl sein zum Lesen. %lf ist für reading in a long floating point number, das ist ein double.

+0

sollte "% lf" sein, da es ein Double ist. –

+0

@ KenY-N: Nein. Aber es sollte Standard 'scanf' anstelle von Microsoft' scanf_s' sein. Besser, sollte es mit C++ iostreams i/o ersetzt werden. –

+0

@ Cheersandhth.-Alf Überprüfen Sie die [nicht akzeptierte Antwort] (http://stackoverflow.com/a/28566203/1270789) in der dup oder [diesen Link] (http://en.cppreference.com/w/c/ io/fscanf) - beide sagen '% lf'. –