2016-07-04 7 views
1

Dies ist das Programm, das ich versucht wurde zu machenC++ printf nur am Ende erscheint

das Programm funktioniert zu lernen, aber die Meldung „das Rechteck Höhe Typen“ und „geben Sie die Breite des Rechtecks“ erscheint nur, wenn das Programm

ist über
#include <stdio.h> 

using namespace std; 

float calculateArea(float a, float b) 
{ 
    return a * b; 
} 

float calculatePerimeter(float a, float b) 
{ 
    return 2*a + 2*b; 
} 

void showMessage(char *msg, float vlr) 
{ 
    printf("%s %5.2f", msg, vlr); 
} 

int main() 
{ 
    float height, width, area, perimeter; 

    printf("type the rectangle height"); 

    scanf("%f%*c", &height); 

    printf("type the rectangle width"); 

    scanf("%f%*c", &width); 

    area = calculateArea(height, width); 

    perimeter = calculatePerimeter(height, width); 

    showMessage("The area value is =", area); 

    showMessage("The perimeter value is =", perimeter); 

    return 0; 
} 
+0

Dies liegt daran, dass printf nicht sofort Zeichen auf den Bildschirm setzt. Es kopiert es zuerst in den Pufferspeicher. Um etwas auf dem Bildschirm anzuzeigen, müssen Sie den Puffer mit dem Bildschirm synchronisieren. Sie können das mit 'fflush (stdout)' tun, aber Sie können auch ein Zeilenende-Zeichen ("\ n") innerhalb Ihrer Zeichenfolge hinzufügen. Dies liegt daran, dass der Standard-Ausgabepuffer oft automatisch synchronisiert wird, wenn er '\ n' findet. – Logman

Antwort

2

Natürlich können Sie eine neue Zeile drucken:

printf("\n"); 

oder C++ iostreams

cout << endl; 

Wenn Sie möchten, können Sie das Programm zwingen, seinen Ausgangsstrom zu spülen:

fflush(stdout); 

oder mit C++ iostreams

cout << flush; 

Dies erspart Ihnen die Eingabe eines Zeilenumbaus, wenn Sie dies nicht wünschen.

+1

Um genauer zu sein printf und fflush sind korrekte Funktionen auch in C++ nicht nur in C. – Logman

+0

Fixed. Vielen Dank. – theunamedguy

+0

fflush (stdout); gearbeitet Vielen Dank – Victor

1

Sie benötigen eine neue Zeile drucken:

void showMessage(char *msg, float vlr) 
{ 
    printf("%s %5.2f\n", msg, vlr); 
    //   ----^ 
} 

Der Grund liegt daran, dass in der Standardeinstellung stdoutLine-gepuffert ist - das bedeutet, dass der Inhalt, den Sie in den Stream schreiben, gepuffert wird, bis ein Zeilenumbruchzeichen geschrieben wird. Zu diesem Zeitpunkt wird der Puffer gelöscht und tatsächlich auf die Konsole geschrieben.

+0

Aber der Fehler ist in "geben Sie die Rechteckhöhe" und "geben Sie die Rechteckbreite" kann ich das gleiche tun? – Victor