Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
07.01.14, 11:00
|
#1
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
For-Schleife
Hi.
Nach langer und harter Recherche und Programmierung, hab ich nun ein Programm geschrieben, dass zwei Zufallszahlen generiert und diese vergleicht. Das macht das Programm nun solange, bis die generierten Ziffern übereinstimmen. Funzt.
So.
Nun soll das ganze mit einem anderen Programm ausgeführt werden, wo zusätzlich eine Laufvariable hinzukommt, die den Test so oft wiederholt, wie die Laufvariable sagt (meinet wegen fünf mal). Das sollte ja mit einer for-Schleife gehen.
Beim ersten Durchlauf stimmt es auch, nur bei allen danach kommen falsche Werte raus.
Hier der Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int mehrfacher_test(void)
{
int anzahl_tests;
printf("Wie viel Tests sollen durchgefuehrt werden? ");
scanf("%d", &anzahl_tests);
int zaehler, versuche;
for(zaehler=1; zaehler<=anzahl_tests; zaehler++)
{
einfacher_test();
}
printf("\nBei %d Tests wurden im Durchschnitt %d Chipkarten eingezogen.", anzahl_tests, versuche);
}
Und der einfache_test:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int einfacher_test(void)
{
int versuche, zufall1, zufall2;
srand((unsigned) time(NULL));
for(versuche = 1; zufall1 != zufall2; versuche++)
{
zufall1 = rand() % (9999 - 1111 + 1) + 1111;
zufall2 = rand() % (9999 - 1111 + 1) + 1111;
}
printf("\n\nEs wurden %d Chipkarten eingezogen.", versuche);
return 0;
}
Das ganze läuft über eine main-Funktion, die ein Auswahlmenü hat. Funzt ebenfalls.
Warum funktioniert der erste Durchlauf, danach allerdings keiner mehr?
Das Programm ist noch nicht fertig, also nicht wundern, dass es unvollständig aussieht.
|
|
|
07.01.14, 14:39
|
#2
|
Student der Informatik
Registriert seit: Jul 2010
Ort: NRW nähe Münster ;)
Beiträge: 355
Bedankt: 261
|
So hab das mal eben durchlaufen lassen.
1.Fehler mehrere_test gibt keinen Wert zurück
2.Das versuche in mehrere_test ist nicht initialisiert steht irgend ein Müll immer drin.
Wenn ich 5 versuche mache läuft es bei mir sauber durch. Wie meinst du das, dass keiner der folgenden Durchläufe mehr funktioniert?
Jeder Test hat halt das selbe Ergebnis da du srand mit time(null) in jedem test vorinitialisierts.
Da der Zufall am PC in echt gar kein Zufall ist !!
Anbei dein Code etwas verändert damit auch das versuche mehr sin macht etc ...
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int einfacher_test(void)
{
int versuche = 0;
int zufall1 = 0;
int zufall2 = 1;
for(versuche = 1; zufall1 != zufall2; versuche++)
{
zufall1 = rand() % (9999 - 1111 + 1) + 1111;
zufall2 = rand() % (9999 - 1111 + 1) + 1111;
}
printf("\n\nEs wurden %d Chipkarten eingezogen.", versuche);
return versuche;
}
int mehrfacher_test(void)
{
srand((unsigned) time(NULL));
int anzahl_tests;
printf("Wie viel Tests sollen durchgefuehrt werden? ");
scanf("%d", &anzahl_tests);
int zaehler = 0;
int versuche = 0;
for(zaehler=1; zaehler<=anzahl_tests; zaehler++)
{
versuche += einfacher_test();
}
versuche = versuche / anzahl_tests;
printf("\n\nBei %d Tests wurden im Durchschnitt %d Chipkarten eingezogen.", anzahl_tests, versuche);
return 0;
}
int main(void)
{
mehrfacher_test();
fflush(stdin);
getchar();
}
|
|
|
07.01.14, 14:41
|
#3
|
Anfänger
Registriert seit: Mar 2012
Beiträge: 12
Bedankt: 7
|
in der einfacher_test funktion rufst du jedesmal srand auf, srand sollte aber nur einmal während der laufzeit aufgerufen werden da es den seed für die rand funktion bereitstellt und diese muss zur laufzeit nur einmal initialisiert werden.
In deiner mehrfacher_test funktion initialisierst du 'versuche' nie und weist der variablen auch nie etwas zu also kann da nichts vernünftiges rauskommen.
|
|
|
07.01.14, 15:59
|
#4
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
Danke für die Antworten.
Ich hab die Funktionen nun in eigene Dateien gepackt:
main.c
einfacher_test.c
mehrfacher_test.c
main.h
Jetzt zeigt er mir bei mehrfacher_test.c einen Fehler:
Zeile 6 Spalte 1 [Error] expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
Das ist da, wo die "int mehrfacher_test(void)"-Funktion anfängt.
Mit dem Verweis: In function 'einfacher_test'
Allerdings funktioniert der Code, wenn er innerhalb einer Datei geschrieben ist. Nur nicht, wenn ich die Funktionen ausgliedere.
|
|
|
07.01.14, 15:59
|
#5
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
Danke für die Antworten.
Ich hab die Funktionen nun in eigene Dateien gepackt:
main.c
einfacher_test.c
mehrfacher_test.c
main.h
Jetzt zeigt er mir bei mehrfacher_test.c einen Fehler:
Zeile 6 Spalte 1 [Error] expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
Das ist da, wo die "int mehrfacher_test(void)"-Funktion anfängt.
Mit dem Verweis: In function 'einfacher_test'
Allerdings funktioniert der Code, wenn er innerhalb einer Datei geschrieben ist. Nur nicht, wenn ich die Funktionen ausgliedere.
EDIT: Ich hab den Code, bis auf die main-Funktion von Matze500 genommen.
Liegt das an der main?
Hier ist der Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "geldautomaten_check_main.h"
int main(void)
{
srand((unsigned) time(NULL));
int auswahl;
printf("Test der Sicherheit eines Geldautomaten");
printf("\n(1) Einfacher Test");
printf("\n(2) Mehrfacher Test");
printf("\n(3) Programm beenden\n");
scanf("\n\n%d", &auswahl);
switch (auswahl)
{
case 1:
einfacher_test();
break;
case 2:
mehrfacher_test();
break;
case 3:
exit;
break;
default:
printf("Bitte ausschliesslich zwischen 1, 2 oder 3 waehlen!");
}
}
Sollte doch eigentlich stimmen.
|
|
|
07.01.14, 16:07
|
#6
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
Ich habs mir jezt nicht angeschaut aber bitte bitte bitte. Variablen immer Initialisieren. Da kann so ein Mist bei entstehen und ein =0 macht auch kaum Arbeit. Also
int auswahl=0;
|
|
|
07.01.14, 16:15
|
#7
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
Danke, für den Hinweis, war mir nicht klar. Hab´s überall geändert.
|
|
|
07.01.14, 16:18
|
#8
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
Zitat:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "geldautomaten_check_main.h"
|
Fällt dir in der letzten Zeile im Gegesatz zu den anderen Zeilen nichts auf?
|
|
|
07.01.14, 16:22
|
#9
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
Das ist meine Header-Datei. Da ich die Funktionen in eigene Dateien gepackt habe, brauch ich doch eine, um sie zu verlinken. Ich hab´s so gelernt, Header-Dateien in Anführungszeichen zu setzen, wenn sie im gleichen Verzeichnis sind, wie die anderen Dateien. Sonst sucht er ja im Compiler-Verzeichnis danach. Oder liege ich da falsch.
|
|
|
07.01.14, 16:27
|
#10
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
Ups hab übersehen dass das deine Header Datei ist. Ne ist total richtig. Kannst du den Inhalt der Header Datei noch posten?
|
|
|
07.01.14, 16:29
|
#11
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
Inhalt der Header-Datei:
Code:
int einfacher_test(void)
int mehrfacher_test(void)
|
|
|
07.01.14, 16:33
|
#12
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
Da liegt der Fehler. Was willst du denn machen in der Header?
|
|
|
07.01.14, 16:37
|
#13
|
Anfänger
Registriert seit: May 2010
Beiträge: 37
Bedankt: 0
|
Hab´s grad gesehen. Ich hab die Semikolons vergessen. Nun läuft es.
Vielen Vielen Dank an alle beteiligten.
Ich werd sicherlich häufiger Fragen haben.
EDIT: Um deine Frage trotzdem zu beantworten. Ich will damit die Funktionen mit den anderen Dateien verlinken.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
().
|