2016-03-20 4 views
2

Ich habe versucht, ein C-Programm zu debuggen, das Benutzereingaben benötigt, mit Eclipse-IDE und GDB-Debugger. Jedes Mal, wenn ich eine Benutzereingabe in der Konsole eingegeben habe, wurde meine Eingabe zweimal angezeigt. Mit anderen Worten, meine Eingabe wurde mit dem gleichen Wert wiedergegeben. wenn ich das folgende C-Programm zum Beispiel debuggen:Seltsames Verhalten beim Debuggen von C-Programmen in Eclipse mit GDB

#include <stdio.h> 

int main(void) { 
    int length, width, height; 

    printf("Enter length: "); 
    scanf("%d", &length); 
    printf("Enter width: "); 
    scanf("%d", &width); 
    printf("Enter height: "); 
    scanf("%d", &height); 
    printf("Volume = %d\n", length*width*height); 

    return 0; 
} 

, dann wird die Konsole in etwa so aussehen:

Enter length: 2 
2 
Enter width: 3 
3 
Enter height: 4 
4 
Volume = 24 

.

Wie Sie sehen können, werden die Werte 2, 3 und 4 jeweils zweimal angezeigt. Das Ausführen dieses Programms (anstelle von Debugging) gibt das erwartete Ergebnis:

Enter length: 2 
Enter width: 3 
Enter height: 4 
Volume = 24 

Außerdem merke ich, dass die Ausführung von printf() Aussagen verzögert werden: obwohl ich bereits geklickt „über Schritt“, es gibt nichts in der gezeigt ist, Konsole. Um dieses Problem zu machen deutlicher, lassen Sie uns den Code ändern:

#include <stdio.h> 

int main(void) { 
    int length, width, height; 

    printf("Enter length: "); 
    printf("Enter length: "); // newly added line 
    printf("Enter length: "); // newly added line 
    scanf("%d", &length); 
    printf("Enter width: "); 
    scanf("%d", &width); 
    printf("Enter height: "); 
    scanf("%d", &height); 
    printf("Volume = %d\n", length*width*height); 

    return 0; 
} 

In diesem Fall wird die Zeichenfolge „Enter Länge: Geben Sie Länge: Geben Sie Länge:“ wird auf einmal angezeigt, nachdem ich über die Leitung trat 9: scanf("%d", &length);. Wenn ich jedoch am Ende jedes Mal, wenn ich printf()aufrufe, ein neues Zeilenzeichen '\ n' anlege, dann wird es kein Problem geben und die Strings werden sofort auf die Konsole gedruckt.

Ich weiß, dass diese beiden Probleme trivial sind, aber als OCD möchte ich wirklich wissen, was hier vor sich geht. Ich denke, es hat etwas damit zu tun, wie Eclipse Eingabe und Ausgabe behandelt? Aber ich sehe diese Probleme nicht beim Debuggen von Java-Programmen in Eclipse.

PS. Ich laufe auf Mac OS X El Capitan, Eclipse (Mars) IDE für C/C++ - Entwickler, und ich installierte GDB mit Homebrew gemäß der Anweisung, die hier gegeben wird: http://ntraft.com/installing-gdb-on-os-x-mavericks/.

Vielen Dank im Voraus für die Beantwortung.

+0

Versuchen Sie eine bessere IDE: CLion von JetBrains. Ich verstehe nicht, warum irgendjemand Eclipse benutzt. – duffymo

+0

@duffymo: Weil es kostenlos ist? :) Ich benutze Eclipse für Java, also habe ich ihre C/C++ Version versucht. Ich benutze tatsächlich Texteditoren wie Sublime Text für C/C++ .. – David

+0

Es ist der einzige Grund, warum ich es jemals benutzt habe. Ich bin froh, dass ich etwas besseres gelernt habe. – duffymo

Antwort

1

Der Ausgang wird gepuffert. Ein neues Zeilenzeichen löscht den Puffer und zeigt das Ergebnis auf dem Bildschirm an. Aus diesem Grund haben Sie nicht die Issule, wenn Sie \n hinzufügen.

Alternativ können Sie nach Ihren printf-Anweisungen versuchen, fflush(stdout); hinzuzufügen.

Außerdem würde ich auch vorschlagen, dass Sie Xcode für Mac anstelle von Eclipse verwenden.