C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
for( unsigned int i=0; i<size; i++) ich muss bei mir das i vorher deklarieren sonst kann ich nicht kompilieren.
Aber ich benutze auch Visual Studio Express. Wahrscheinlich liegt das daran.
Das Programm erzeugt aber bei Eingabe von Zeichen eine Endlosschleife und du verwendest auch scanf.
Aber ich benutze auch Visual Studio Express. Wahrscheinlich liegt das daran.
Das Programm erzeugt aber bei Eingabe von Zeichen eine Endlosschleife und du verwendest auch scanf.
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Danke für den Tipp mit den Guards. SO ist das wesentlich übersichtlicher.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Das kommt auf die Version an... eigentlich sollte das jede Version können, die man als "Express" herunterladen kann. Mit Visual Studio 2005 ging's jedenfalls.Lone hat geschrieben:for( unsigned int i=0; i<size; i++) ich muss bei mir das i vorher deklarieren sonst kann ich nicht kompilieren.
Aber ich benutze auch Visual Studio Express. Wahrscheinlich liegt das daran.
Das stimmt. Dein Programm erzeugt ein Segmentation Fault, wenn Du eine Zahl eingibst, die mehr als 20 Ziffern hat. ^^Lone hat geschrieben:Das Programm erzeugt aber bei Eingabe von Zeichen eine Endlosschleife und du verwendest auch scanf.
Ich habe scanf weiter benutzt, weil ich Dein Programm nicht komplett auf den Kopf stellen wollte.
Hätte ich das Programm selbst geschrieben, hätte ich wohl die Programmparameter benutzt: Übergabeparameter.
Du benutzt das Tutorial auf dieser Seite nicht, oder?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Ich benutze Visual Studio Express 2012.Das kommt auf die Version an... eigentlich sollte das jede Version können, die man als "Express" herunterladen kann. Mit Visual Studio 2005 ging's jedenfalls.
Weiß garnicht was der für einen Compiler benutzt. Ich habe zwar mal cygwin installiert aber da gab es nur Fehler. VS ist mir da angenehmer.
Das ist zwar nicht das VS Forum aber kann ich da einen anderen Compiler auswählen?
Ich möchte solche Anwenungen ja so schreiben das sie dem Benutzer sagen was er zu tun hat. Wenn ich Parameter benutze entfällt doch die EIngabe die für den Anwender bestimmt ist, oder nicht ?Hätte ich das Programm selbst geschrieben, hätte ich wohl die Programmparameter benutzt
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
VC 2012 unterstützt die Notation garantiert. Ich benutze sie aktuell mit VC 2010, der das auch kann.Lone hat geschrieben:Ich benutze Visual Studio Express 2012.Das kommt auf die Version an... eigentlich sollte das jede Version können, die man als "Express" herunterladen kann. Mit Visual Studio 2005 ging's jedenfalls.
Visual Studio nutzt in der Regel den Compiler mit dem Du die Express Version runtergeladen hast. Du wirst Visual C++ Express runtergeladen haben, also nutzt Du auch den Microsoft-Compiler.Lone hat geschrieben:Weiß garnicht was der für einen Compiler benutzt. Ich habe zwar mal cygwin installiert aber da gab es nur Fehler. VS ist mir da angenehmer.
Keine Ahnung, ob die Expressversion das kann.Lone hat geschrieben:Das ist zwar nicht das VS Forum aber kann ich da einen anderen Compiler auswählen?
Grundsätzlich geht es wohl.
Richtig. Du würdest das Programm dannLone hat geschrieben:Ich möchte solche Anwenungen ja so schreiben das sie dem Benutzer sagen was er zu tun hat. Wenn ich Parameter benutze entfällt doch die EIngabe die für den Anwender bestimmt ist, oder nicht ?Hätte ich das Programm selbst geschrieben, hätte ich wohl die Programmparameter benutzt
Code: Alles auswählen
lotto 1 2 3 4 5 6
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Nope. Bei mir muss ich es wie gesagt anders schreiben ansonsten startet der Debugger nicht.VC 2012 unterstützt die Notation garantiert. Ich benutze sie aktuell mit VC 2010, der das auch kann.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Das liegt daran, dass deine Projekteinstellungen falsch sind und dein Compiler angewiesen wird irgendeinen uralten C-Standard zu nutzen.Nope. Bei mir muss ich es wie gesagt anders schreiben ansonsten startet der Debugger nicht.
Unter Projekt->Eigenschaften->Compiler müsste irgendwo was von C99 oder Ansi-C99 stehen und da muss dann was geändert werden, was weiß ich aber nicht genau, da ich gerade keinen Zugriff auf ein VS habe.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Ich hab dort die möglichkeit zwischen c und c++ zu wechseln aber von c99 o.ä. steht da nichts und auch google hat mir nichts genaueres sagen können. Im Moment ist es auch nicht so schlimm.Das liegt daran, dass deine Projekteinstellungen falsch sind und dein Compiler angewiesen wird irgendeinen uralten C-Standard zu nutzen.
Unter Projekt->Eigenschaften->Compiler müsste irgendwo was von C99 oder Ansi-C99 stehen und da muss dann was geändert werden, was weiß ich aber nicht genau, da ich gerade keinen Zugriff auf ein VS habe.
Ich habe dem Programm noch ein paar Sachen hinzugefügt.
Zum Schluss wollte ich noch wissen wieviele Spiele es braucht bis ich mit denselben Zahlen gewinne.
Ich habe zur Sicherheit geprüft ob bei jedem neuen Durchlauf auch andere Zufallszahlen kommen. Trotzdem läuft es ohne Unterbrechung. Da bin ich mir jetzt nicht sicher ob es eine Endlosschleife ist oder wirklich so lange dauert

Code: Alles auswählen
#define TRUE 1
#define FALSE 0
/* Function compares Arrays*/
void CompareArrays(int *str1,
int *str2)
{
}
/* Function prints an array */
void printArray(int *x)
{
int j;
printf("\n\n");
for(j=0; j<6; j++)
printf(" %2d",x[j]);
printf("\n");
}
/* Function checks if the number was already entered */
int valueAlreadyEntered(int *x,
int value,
unsigned int maxIndex)
{
unsigned int i;
for (i = 0; i < maxIndex; i++)
if (x[i] == value)
return TRUE;
return FALSE;
}
/* Function creates 6 random numbers */
void getWinningnumbers (int *y)
{
int j,randvalue;
//for(i=0; i<1; i++) {
for(j=0; j<6; j++) {
while(1) {
randvalue = rand() % 49 + 1;
if(valueAlreadyEntered(y, randvalue, 6))
{
continue;
}
y[j] = randvalue;
break;
}
}
}
/* Function sorts an Array */
void ArraySort(int *x,
int size)
{
int i, temp, minIndex;
for(i=0; i<size-1; i++) {
minIndex = ArrayMinIndex(x, i, size);
if(i != minIndex) {
temp = x[i];
x[i] = x[minIndex];
x[minIndex] = temp;
}
}
}
/* Function gets minimum Index from an Array */
int ArrayMinIndex(int *x,
int start,
int size)
{
int minIndex=start, i;
for(i=start; i<size; i++) {
if(x[i] < x[minIndex]) {
minIndex = i;
}
}
return minIndex;
}
/* Function lets the User input 6 Numbers. */
int getyournumbers(int *x)
{
char buffer[20];
char *ep;
unsigned int value,i;
for(i=0;i<6;i++) {
while (1) {
printf("\n %d. Zahl: ",i+1);
scanf( "%s", buffer );
errno = 0;
value = strtol( buffer, &ep, 10);
if( valueAlreadyEntered( x, value, i ))
{
printf( "Value allready exists! Please enter a different value." );
continue;
}
if ((errno != 0) || (*ep != '\0' ))
{
printf( "Input was not a number!\n" );
continue;
}
if (value < 0 || value > 49)
{
printf( "Input has to be a value between 1 and 49!\n" );
continue;
}
x[i] = value;
break;
}
}
}
/* Main program */
int main (void) {
int yournumbers[6];
int winningnumbers[6];
int n;
unsigned long int Games=0;
unsigned int seed = time(NULL);
srand(seed);
printf("\n\t\t\t Lotto");
getyournumbers(&yournumbers[0]);
ArraySort(&yournumbers[0],6);
printf("\nYour Numbers are:");
printArray(&yournumbers[0]);
while(1) {
getWinningnumbers(&winningnumbers[0]);
ArraySort(&winningnumbers[0],6);
printf("\nThe winning numbers are:");
printArray(&winningnumbers[0]);
n=memcmp ( yournumbers, winningnumbers, sizeof(yournumbers) );
if(n != 0)
{
Games++;
continue;
}
else
break;
}
printf("\nIt took %i Games to win.",Games);
printf("\n");
printf("\n\nPress any key...");
_getch();
return 0;
}
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Statistisch gesehen 10'068'347'520 Versuche, wenn mich nicht alles täuscht.Lone hat geschrieben:Zum Schluss wollte ich noch wissen wieviele Spiele es braucht bis ich mit denselben Zahlen gewinne.

10 Milliarden Iterationen dauern auch auf einem modernen Rechner einen Moment.
Ich habe zur Sicherheit geprüft ob bei jedem neuen Durchlauf auch andere Zufallszahlen kommen. Trotzdem läuft es ohne Unterbrechung. Da bin ich mir jetzt nicht sicher ob es eine Endlosschleife ist oder wirklich so lange dauert

Mach doch einen Test. Programmiere eine zweite getWinningnumbers, die nicht Zufallszahlen zurück gibt, sondern 10 unterschiedliche Versionen von 6 Zahlen zurück gibt, aber eben nicht zufällig. Gibst Du eine dieser Zahlen ein, musst Du ja bald gewinnen. ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C: Zahlen einlesen, wenn Zeichen oder doppelt zurück
Werde ich mal versuchen.
Danke für die ganze Hilfe
MfG Lone
Danke für die ganze Hilfe

MfG Lone