#include
<csignal>
int raise (int signum)
Löst ein Signal signum
aus.
Warnung: Destruktoren automatischer und statischer Objekte werden nicht aufgerufen. In C++ sollte der Mechanismus der Ausnahmebehandlung vorgezogen werden.
signum | Signalnummer |
Rückgabewert: 0 bei E
#include <cstdio> #include <csignal> using namespace std; int ist_prim(int p) { int erg = p>=2; for (int i = 2; i < p; ++i) { if (p%i == 0) erg = 0; } return erg; } int max_prim = 2; void tschuess(int num) { printf("groesste gefundene Primzahl: %d\n", max_prim); signal(SIGINT, SIG_DFL); raise(SIGINT); // unsauber ??? } void zwischenbericht(int num) { static int versuch = 1; printf("Versuch %d bei %d\n", versuch, max_prim); signal(SIGINT, ++versuch < 3 ? zwischenbericht : tschuess); } int main() { printf("Suche grosse Primzahl\nAbbruch mit Strg+C (3 Versuche)\n"); signal(SIGINT, zwischenbericht); for (int n = 1; n > 0; ++n) { if (ist_prim(n)) max_prim = n; } return 0; }