C++: fprintf problem mit linux

B

ByeBye 177919

Hey,

ich habe angefangen neben PHP noch C++ zu lernen.

Als meine erste Aufgabe hab ich mir ein Benchmarking Tool geschrieben.

Hier ist der Code:

Code:
#include <stdio.h>
#include <ctime>
#include <stdlib.h>

int main () {
{
	fprintf(stdout, "Benchmarking Tool");
	getchar();
    fprintf(stdout, "Fange an zu rechnen. Bitte haben Sie Geduld...");
    int startZeit = clock();
	srand (time(NULL));
    for (int index=0; index<100000000; index++)
	{
        rand()*clock()+rand()*clock()*clock()*rand()/3;
	}
	fprintf(stdout, "\n_____________\n");
    int Ende = clock()-startZeit;
    fprintf(stdout, "%i ms", Ende);
    getchar();
    
	return 0;
}
}

Unter Windows läuft alles wie es soll (notebook, 2ghz). Erst sagt er "Benchmarking Tool". Dann drück ich enter und dann kommt die 2te Meldung und meine CPU schießt in den himmel.

Dann wenn zu ende gerechnet wurde, kommt ne Meldung wie lange die CPU gebraucht hat. Alles gut und schön.

Unter Linux läuft es etwas anders ab.

Dort erscheint nur die Meldung "Benchmarking Tool", dann drück ich enter, dann rechnet er ne große Ewigkeit (ist nur ein 900mhz pc worauf mein linux läuft (server)) und dann kommt erst 2te Meldung und die Meldung wie lange er gebraucht hat. Obwohl ja logischerweise erst die 2te Meldung kommen sollte und dann anfangen sollte zu rechnen und dann das Ergebnis.

Ebenso ist das Format anders von clock().

Unter Windows sind es Millisekunden. Unter Linux ka was. Nanosekunden kann es nicht sein, den als Ergebnis bei meinem Server kommt 288890000 raus. Und das wären (wenn es Nanosekunden wäre) 288,89ms.

Kann mir also einer helfen bzw sagen woran es liegt?
 
Zum Rueckgabewert von clock() schau Dir mal man clock an.

Nach POSIX solltest Du hier Millionstel-Sekunden, also Mikro-Sekunden bekommen.
 
Zum Rueckgabewert von clock() schau Dir mal man clock an.

Nach POSIX solltest Du hier Millionstel-Sekunden, also Mikro-Sekunden bekommen.

Ok, und wieso ist es bei Windows anders? :)

Gibt es eine alternative zu clock() der bei Linux und Windows gleich ist?.

Weißt einer wie man die restlichen "fehler" beheben kann?
 
Hmm ...
(1) Das ist mehr C als C++
(2) fprintf(stdout, ...) == printf(...) ;)
(3) http://www.cppreference.com/stddate/clock.html

usw ...

1: wie meinst das?

2: hab jetzt printf genommen:

Code:
#include <stdio.h>
#include <ctime>
#include <stdlib.h>

int main () {
{
	printf("Benchmarking Tool");
	getchar();
    printf("Fange an zu rechnen. Bitte haben Sie Geduld...");
    int startZeit = clock();
	srand (time(NULL));
    for (int index=0; index<100000000; index++)
	{
        rand()*clock()+rand()*clock()*clock()*rand()/3;
	}
	printf("\n_____________\n");
    int Ende = clock()-startZeit;
    printf("%i ms", Ende);
    getchar();
    
	return 0;
}
}

unter linux ist immer noch der selbe "fehler".

3: versteh nicht was ich da machen soll :)
 
Hallo,
Dort erscheint nur die Meldung "Benchmarking Tool", dann drück ich enter, dann rechnet er ne große Ewigkeit (ist nur ein 900mhz pc worauf mein linux läuft (server)) und dann kommt erst 2te Meldung und die Meldung wie lange er gebraucht hat. Obwohl ja logischerweise erst die 2te Meldung kommen sollte und dann anfangen sollte zu rechnen und dann das Ergebnis.

schau mal da:
http://www.tutorials.de/forum/c-c/317440-c-linux-printf-schreibt-nicht-konsole.html

Gruß,
RedWing
 
@tomekk228: Du solltest lesen was auf den Seiten steht die man dir verlinkt. Dein Code dürfte nicht compiliert werden. Welchen Compiler hast du?
 
@tomekk228: Du solltest lesen was auf den Seiten steht die man dir verlinkt. Dein Code dürfte nicht compiliert werden. Welchen Compiler hast du?

Wieso dürfte der nicht compiliert werden? :confused:

Nutze Dev-C++ unter Windows (Kenne leider keine anderen =/ ). Und unter Linux normal mit gcc bzw g++.

Mit beiden kann ich ganz normal den Code kompilieren >

Code:
#include <stdio.h>
#include <ctime>
#include <stdlib.h>

int main () {
{
	printf("Benchmarking Tool\n");
	getchar();
    printf("Fange an zu rechnen. Bitte haben Sie Geduld...\n");
    int startZeit = clock();
	srand (time(NULL));
    for (int index=0; index<100000000; index++)
	{
        rand()*clock()+rand()*clock()*clock()*rand()/3;
	}
	printf("\n_____________\n");
    int Ende = clock()-startZeit;
    printf("%i ms", Ende);
    getchar();
    
	return 0;
}
}

Und das hier > http://www.cppreference.com/stddate/clock.html

Versteh ich leider nicht.

Wie gesagt, ich hab erst vor paar stunden mit C++ angefangen.

Edit:

Btw, kann es sein das mein Server (Intel p3 900mhz, 512DDR) für das Ausrechnen knapp 300 sekunden also 5 Minuten braucht?

Den mein Notebook (intel celeron m 2ghz 512ddr) braucht nur 20 - 22 sekunden ca.
 
Zuletzt bearbeitet von einem Moderator:
Aber willstn Benchmark_tool schreiben, klar :p

clock liegt im Header <ctime>, damit im Namensraum std.

C++:
#include <stdio.h>
#include <stdlib.h>
werden zu
C++:
#include <cstdio>
#include <cstdlib>
und weil wir aber lieber nicht die ausm C-Standard übernommenen Funktionen nehmen wollen, sondern richtig C++-Style arbeiten wollen:
C++:
#include <cstdlib>
#include <iostream>

C++:
#include <cstdlib>
#include <iostream>
#include <ctime>

int main () 
{
    std::cout << "Benchmarking Tool\n"
                   << "-> Zum Beginnen bitte eine beliebige Taste drücken!";
    std::cin.ignore();

    std::cout << "Bitte haben Sie Geduld...\n";
    
    const std::clock_t begin(std::clock());
	
    std::srand(static_cast<unsigned>(std::time(NULL)));

    float temp;
   
    for (unsigned int i(0); i < 100000000; ++i)
        temp = (std::rand() * std::clock() + std::rand() * std::clock() * std::clock() * std::rand() / 3.0f);

    std::cout << "______________________________________\n"
                  << "Zeit: " << (std::clock() - begin) / CLOCKS_PER_SEC << " sec.";
    std::cin.ignore();
}
...
 
Zurück