Einlesen
-
Hallo,
nachdem nun meine Random Fkt. klappt,
möchte ich für meinen Lottogenerator Zahlen einlesen.Diese Zahlen sollen zwischen 1 und 49 liegen!
Geht das in die Richtung:
char cZahlen[6]={0,0,0,0,0,0}; int i; for(i=0;i<6;i++) { scanf("%c",&cZahlen[i]); }
Oder kann ich das besser lösen.
-
Schon richtig so. Das Array musst du aber nicht unbedingt mit 0en initialisieren.
Füge noch nach dem scanf() einwhile (getchar() != '\n');
ein, um das '\n' der vorherigen Eingabe zu entfernen!
-
erstmal würde ich mal %d nehmen :
scanf("%d",&cZahlen[i]);dann sollte dir klar sein dass auch zahlen <49 und < 0 eingelesen werden können,
also solltest du das abfangen.
Beispiel 1 schleifendurchlauf mehr nach falscher zahl , oder eine maximal oder minimal konvertierung.
So dass z.B nach eingabe von 50 automatisch 49 genommen wird.Weiterer Fehler
es können bis zu 6 mal die gleichen zahlen eingelesen werden , sprich jemand kann 6 mal hintereinander die gleiche zahl ( 1-49) eingeben und dein feld sieht dann z.B so aus :cZahlen[6]={1,1,1,1,1,1};
musste auch wiederrum eine prüfung machen ob die zahl schon gewählt wurde indem du z.B das feld durchsuchst.
BTW : zeig mal die random funktion ^^
-
49 sollte das natürlich sein
-
Ich hab das jetzt so gemacht:
for(i=0;i<6;i++) { scanf("%d",&cZahlen[i]); while (getchar() != '\n'); if(cZahlen[i]<1 || cZahlen[i] >49) { printf("%s\n",FEHLER); i=i-1; } }
Könnte so klappen oder?
Dann würde ich gern die Zahlen hintereinander auf einer Zeile mit Abstand haben.
Wie mach ich das?
-
Erstmal solltest du für deine Zahlen ein int-Array verwenden, ansonsten sieht es schon gut aus (fehlt nur noch ein Schutz gegen doppelt verwendete Zahlen).
Zur Ausgabe:
for(i=0;i<6;++i) printf("%d\t",cZahlen[i]);//das \t im Formatstring sorgt für den Abstand printf("\n");//neue Zeile
-
Wo soll die Ausgabe hin???
-
Das mußt du wissen
Ich habe lediglich deine Aussage:
fevernova schrieb:
Dann würde ich gern die Zahlen hintereinander auf einer Zeile mit Abstand haben.
interpretiert, daß du die Zahlen hintereinander weg ausgeben wolltest.
-
dann anders...
ich möchte die Zahlenreihe nach der Eingabe nochmal zusammen und hintereinander ausgeben.
-
nach der while ein Semikolon ??? confused
die ausgabe entweder nach der while schleife oder mittendrin statt nur dabei
-
Wie kann ich nun noch überprüfen, ob die Zahl schon drin ist,
also eine Vermeidung doppelter Zahlen?
-
#include <stdio.h>
int main(int argc, char *argv[])
{
int cZahlen[6];
for(int i=0;i<6;i++)
{
scanf("%d",&cZahlen[i]);
while (getchar() != '\n');
if(cZahlen[i]<1 || cZahlen[i] >49)
{
printf("%s\n","Fehler Zehl nicht im Bereich von 1-49");
getchar();
exit(1);
i=i-1;
}
for(int f=0;f<i;f++)
{
if(cZahlen[i]==cZahlen[f])
printf("%s\n","Fehler Doppelte Zahl");
getchar();
exit(1);
}
}for(int i=0;i<6;++i)
printf("%d\t",cZahlen[i]);//das \t im Formatstring sorgt für den Abstand
printf("\n");//neue Zeile
return 0;
}So und jetzt lern mal was dazu
-
versuchs lieber damit
#include <stdio.h>
int main(int argc, char *argv[])
{
int cZahlen[6];
for(int i=0;i<6;i++)
{
scanf("%d",&cZahlen[i]);
while (getchar() != '\n');
if(cZahlen[i]<1 || cZahlen[i] >49)
{
printf("%s\n","Fehler Zehl nicht im Bereich von 1-49");i=i-1;
}
for(int f=0;f<i;f++)
{
if(cZahlen[i]==cZahlen[f])
printf("%s\n","Fehler Doppelte Zahl");}
}for(int i=0;i<6;++i)
printf("%d\t",cZahlen[i]);//das \t im Formatstring sorgt für den Abstand
printf("\n");//neue Zeile
return 0;
}
-
das i-- auch in die 2 schleife und ein break fehlt noch also
for(int f=0;f<i;f++)
{
if(cZahlen[i]==cZahlen[f])
{
printf("%s\n","Fehler Doppelte Zahl");
i--;
break;
}}
-
Hab das jetzt so realisiert:
int iZahlen[6]={0,0,0,0,0,0}; printf("\n1.Reihe - Bitte eingeben:\n"); for(int i=0;i<6;i++) { scanf("%i",&iZahlen[i]); while (getchar() != '\n'); if(iZahlen[i]<1 || iZahlen[i] >49) { printf("%s\n",FEHLER_2); i=i-1; } for(int f=0;f<i;f++) { if(iZahlen[i]==iZahlen[f]) { printf("%s\n",FEHLER_3); i=i-1; break; } } } printf("Ihre Tippreihe lautet: %i, %i, %i, %i, %i, %i.",iZahlen[0],iZahlen[1],iZahlen[2],iZahlen[3],iZahlen[4],iZahlen[5]);
Jetzt werde ich mich mal noch um das Sortieren bemühen!
-
Hier ist mein Code für die Sortierung - klappt auch einwandfrei!
int done = 0; int iWechsel; while(!done ) { done = 1; for(int i = 1; i < 7; i++) { if(iZahlen[i-1] > iZahlen[i]) { iWechsel = iZahlen[i-1]; iZahlen[i-1] = iZahlen[i]; iZahlen[i] = iWechsel; done = 0; } } } printf("Ihre Tippreihe lautet: %i, %i, %i, %i, %i, %i.",iZahlen[0],iZahlen[1],iZahlen[2],iZahlen[3],iZahlen[4],iZahlen[5]);
-
Ich hab wieder was.
In einer anderen Funktion der Klasse habe ich eine 2te manuelle Eingabe der Zahlen für eine 2te Tippreihe.Kann ich da 2x mal hintereinander das vorhin gepostete ausführen oder ist das eine Frage des Stils? Und gehts anders?
-
Ja, kannst du, ist aber unnötig - pack die ganze Eingabe lieber in eine Funktion:
void lies_tip(int*target) { //hier kommt dein Quelltext - verwendet target statt iZahlen } int main() { int tip1[6],tip2[6]; lies_tip(tip1); lies_tip(tip2); }