schreiben in c mit printf und scanf funktioniert nicht wie erwartet
So, ich bin ein totaler newb auf C. ich verwende eclipse mit MinGW compiler. Ich bin auf das zweite Kapitel mit der scanf-und printf-Funktionen und mein Programm funktioniert, aber nur das drucken der Anweisungen an die Konsole habe ich einmal eingegeben, der drei int-Werte in die scanf-Funktionen.
#include <stdio.h>
int main(void){
int length, height, width, volume, dweight;
printf("Enter the box length: ");
scanf("%d", &length);
printf("\nEnter the box width: ");
scanf("%d", &width);
printf("\nEnter the box height");
scanf("%d", &height);
volume = length * width * height;
dweight = (volume + 165) / 166;
printf("Dimensions: l = %d, w = %d, h = %d\n", length, width, height);
printf("Volume: %d\n", volume);
printf("Dimensional Width: %d\n", dweight);
return 0;
}
Ausgabe der Konsole:
8 (user input + "Enter" + key)
10 (user input + "Enter" key)
12 (user input + "Enter" key)
Enter the box length:
Enter the box width:
Enter the box heightDimensions: l = 8, w = 10, h = 12
Volume: 960
Dimensional Width: 6
irgendwelche Erkenntnisse? Ich gehe davon aus, dass es zu printf, dann scanf für user-input wie so:
Enter the box length: (waits for user int input; ex. 8 + "Enter")
Enter the box width: ...
- versuchen Sie es: rufen Sie
fflush(stdout)
vor dem ersten printf - Auch sollten Sie die Rückgabewerte von scanf
- welchen compiler verwendest du? Es funktioniert gut in gcc.
- Code funktioniert wie man es erwartet auf GCC 4.7.1.
- fflush gearbeitet, wenn es nach den printf-Anweisungen
- stackoverflow.com/questions/16877264/...
- eclipse bug report: bugs.eclipse.org/bugs/show_bug.cgi?id=173732 im wesentlichen, Eclipse nicht (kann nicht?) emulieren ein terminal richtig, so dass die üblichen buffering-Modus für Klemmen wird nicht konfiguriert.
- Hinweis: Sie erhalten eine abgerundete-up-Wert mit
dweight = (volume + 165) / 166
. Um eine Runde auf die nächste, verwendendweight = (volume + 166/2) / 166
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einfach
fflush(stdout);
nach jedemprintf()
rufen Sie vorscanf()
:'\n'
in den output-stream auslösen könnte einen flush. Ein Zeilenumbruch ist nicht erforderlich, um trigger einen flush, aber könnte es tun, so auf einigen Systemen.Umgang mit Schmutzigen Puffer in C !!
Können Sie einfach eine newline-Zeichen (escape-Sequenz) '\n' am Ende jedes printf(), dies dient zum Spülen der Puffer, die schließlich aktivieren Sie die Anzeige auf das Ausgabe-terminal.( gleiche Funktionalität wird erreicht durch fflush(stdout), aber es gibt keine Notwendigkeit, es zu schreiben, bei jedem Aufruf der printf(), nur sind ein Zeichen '\n')
Hinweis: es ist immer empfehlenswert, mit einem '\n' - Zeichen als letztes element innerhalb der Anführungszeichen "" für printf(), die Daten bleiben innerhalb der Puffer, es sei denn, eine Spül-Mechanismus verwendet wird, jedoch der Puffer geleert werden, automatisch, wenn die Funktion main() endet, werden Darüber hinaus Daten erreicht sein Ziel nur, wenn die interim-Puffer geleert werden.
Unsere neue code sollte wie folgt Aussehen:
Ausgabe der Konsole :