[C/C++] zahl mit Zahl im Array vergleichen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Gojus, 5. Januar 2011 .

  1. 5. Januar 2011
    zahl mit Zahl im Array vergleichen

    Moinsen.
    Ich muss ein Lottozahlen Programm für die schule schreiben. Habe aber ein problem beim vergleichen der Zahlen. Man soll nämlich seine Zahlen eingeben können. Wobei keine Zahl doppelt auftauchen darf. Der Name und die Zahlen sollen in einem Struct gespeichert werden.

    ich hab folgendes versucht:

    Code:
    int main(){
    
    struct{
     char name[20];
     int zahl[7];
    }schein
    
    int i=0;
    int j=0;
    int z=0;
    
    printf("Geben Sie ihren name ein:\n")
    scanf("%s", &schein.name);
    
    for(i=1;i<7;i++){
     
     printf("Eingabe Ihrer Zahlen:\n");
     printf("%i Zahl", i);
     scanf("%i", z);
    
     for(j=1;j<7;j++){
     if(z == schein.zahl[i]){
    
     printf("Zahl schon vorhanden. Bitte neu eingeben:\n");
     printf("%i Zahl", i);
     scanf("%i", z);
     z == schein.zahl[i];
     }else{
     
     z == schein.zahl[i];
    
     }
    }
    }
    
    Ich habe das gerade aus dem Kopf programmiert, weil ich das programm aufn schulrechner habe. Also verzeiht mir jeglichen Fehler. Es geht mir hierbei ja auch nur um der vergleich von z und dem array. Ich habe den vergleich auch schon versucht ohne den struct. Vergleichen will er sie trotzdem nicht.

    Kann mir einer helfen.
    Das programm muss noch weiter gestaltet werden. Muss bis dienstag fertig sein.
    Also bitte um schnelle Hilfe
     
  2. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Code:
    for([B]j[/B]=[B]1[/B];[B]j[/B]<7;[B]j[/B]++){
    if(z == schein.zahl[[B]i[/B]]){
    
    Hoffe man kann das fettgedruckte sehen. Ansonsten hier nochmal in Textform:
    1. Du verwendest in der for-Schleife j, beim Arrayzugriff dann aber i.
    2. Du startest mit dem Index j=1, bei C fängt man aber bei 0 an zu zählen!
     
  3. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    ich hab das zuhause nochmal versuch nachzuprogrammieren.
    Habe den dev c++ builder. Habe die Syntax überarbeitet weil da noch paar semikolons fehlten.
    der kackt aber nach der eingabe der ersten Zahl ab.
    Kann mir wer sagen warum?
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
    struct{
    char name[20];
    int zahl[7];
    }schein;
    
    int i=0;
    int j=0;
    int z=0;
    
    printf("Geben Sie ihren name ein:\n");
    scanf("%s", &schein.name);
    
     for(i=1;i<7;i++){
    
     printf("Eingabe Ihrer Zahlen:\n");
     printf("%i Zahl:", i);
     scanf("%i", z);
    
     for(j=1;j<7;j++){
     if(z == schein.zahl[i]){
    
     printf("Zahl schon vorhanden. Bitte neu eingeben:\n");
     printf("%i Zahl", i);
     scanf("%i", &z);
     z == schein.zahl[i];
     }else{
    
     z == schein.zahl[i];
    
     }
     }
    }
    }
    
     
  4. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Außerdem sehe ich noch einen Fehler bei dem Vergleich der bisherigen Zahlen.

    In C wird ein Array nicht wie in Java mit 0 vorinitialisiert.
    Bei der sagen wir dritten Zahl vergleichst du diese mit allen sieben Zahlen deines Arrays. Da du bis dahin nur die ersten zwei Zahlen gesetzt hast, sind also die Zahlen drei-sieben "uninitialisiert". Wenn du Pech hast, stand in dem Speicher, den du mit dem Array allokiert hast zufällig die Zahl drin, welche als drittes eingegeben wurde, die aber nicht unter den ersten zwei ist.
    Also nach jeder Abfrage der Zahl sollte deine Schleife so aussehen:

    Code:
    for(i=0;i<7;i++){ //mit 0 und nicht mit 1 starten, wie pyro bereits sagte
    //Hier wird die Zahl eingelesen
    for(j=0;j<i;j++){ //auch mit 0 starten
    if(z == schein.zahl[j]){ //mit index j auf array zugreifen, nicht mit i
    //.....}..}
    
    edit: du checkst auch nach dem eingeben der korrigierten zahl nicht, ob diese nicht vielleicht schon vorhanden ist. außerdem ist deine zuweisung
    Code:
    z == schein.zahl[i];
    
    vollkommener quatsch.
    erstmal willst du schein.zahl auf den wert z setzen und nciht andersrum. außerdem vergleichst du mit == zwei zahlen, weist aber einer variable keinen wert zu, das macht man mit =

    so muss es aussehen:
    Code:
    schein.zahl[i] = z;
    
    edit2: ich weiss nicht, ob ihrs so gelernt habt
    Code:
    scanf("%s", &schein.name);
    Wenn ja, dann sag deinem Lehrer, dass man das NIEMALS so machen sollte und dass er mal drüber nachdenken soll, warum das so ist. Wenn nicht, dann frag ihn warum man es nie so machen sollte
    [Tipp: geb mal einen namen mit 30 buchstaben ein und wunder dich, warum alles abstürzt oder komische Sachen tut]
     
  5. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    danke für die infos. Kann aber immernoch nicht das programm testen weil es nach der ersten eingabe einer zahl abstürzt. Und ich habe nochmal im Script des lehrers nachgelesen. und ja scanf("%s", &schein.name);. steht so da drinne. Was daran nicht so gut? hab erst nächste woche mittwoch wieder xD
     
  6. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Code:
    scanf("%i", &z);
    du musst beim scanf die adresse von z angeben, nicht z selbst. dann sollte es auch nicht abstürzen.

    Code:
    scanf(%s,&var);
    Diese Anweisung überprüft nicht die Länge des Strings, welcher eingegeben wurde. So ist es möglich nen String einzugeben, der länger ist als die 20 Zeichen, welche dafür vorgesehen sind. Im besten Fall hat man Glück und es läuft normal, im schlechteren Fall macht das Programm irgendwas falsches, im noch schlechteren Fall stürzt es ab und im allerschlimmsten Fall hat man einem Hacker Tür und Tor sperrangelweit geöffnet einen Buffer-Overflow durchzuführen und mit etwas Glück den ganzen Rechner zu kompromittieren.
    Der letzte Fall wird bei deinem Mini-Prog wohl nicht wirklich eintreten, aber es ist einfach eine Programmiertechnik, die man heutzutage nicht benutzen und vor allem nicht irgendwem beibringen sollte. (Jaja, Informatiklehrer die keine Ahnung haben. Hatte ich leider damals auch einen von -.-)
     
  7. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Was meinst du mit: die adresse von z und nicht z selbst?.
    Und was soll ich in den quelltext dann reinschreiben statt dem was ich drinne hab?
     
  8. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    lass dir das von deinem lehrer erzählen (auch wenn ich fast bezweifle, dass ers weiss) oder goole es einfach (vllt anstatt nach adresse nach zeiger oder pointer suchen). Es würde den rahmen sprengen dir das jetzt zu erläutern.

    du sollst das reinschreiben, was ich dir geschrieben hab. mit & vor dem z. bei dir ists ohne, deswegen klappts nicht.
     
  9. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    achso. garnicht gesehen. dachte ich hätte das & reingemacht. danke.
    soo jetzt mal testen obs funktioniert wie ich es mir vorstelle. Melde mich gleich nochmal ^^

    edit:
    soo hab das programm gerade mal kurz gestartet. Habe 3 mal 1 eingeben können bevor er gesagt hat das es doppelt vorkommt. das problem hat ich in der schule auch.
    Was das los?
     
  10. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    hi

    könntest du den korrigierten code bitte posten?

    danke
     
  11. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    ich hab da so ne vermutung. aber poste wie mein vorredner schon sagte deinen code, dann können wir weitersehen. so ists heiteres rumgerate mit glaskugel
     
  12. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    ja sry. natürlich mach ich das:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
    struct{
    char name[100];
    int zahl[7];
    }schein;
    
    int i=0;
    int j=0;
    int z=0;
    
    printf("Geben Sie ihren name ein:\n");
    scanf("%s", &schein.name);
    
     for(i=0;i<7;i++){
    
     printf("Eingabe Ihrer Zahlen:\n");
     printf("%i Zahl:", i+1);
     scanf("%i", &z);
    
     for(j=0;j<i;j++){
     if(z == schein.zahl[j]){
    
     printf("Zahl schon vorhanden. Bitte neu eingeben:\n");
     printf("%i Zahl", i+1);
     scanf("%i", &z);
     z == schein.zahl[i];
     }else{
    
     schein.zahl[i] = z;
    
     }
     }
    }
    }
     
  13. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    aaah ich sehe das Problem.

    du machst die Zuweisung
    Code:
    schein.zahl[i] = z;
    im else fall. diese muss nach der for-schleife kommen, nicht nur im else fall.
    Im moment läufts so: du weist dem array an pos 0 keinen wert zu, da die innere for-schleife nicht durchlaufen wird (was ja nicht muss, da in dem fall kein wert im array steht vorher).
    danach springt die äußere schleife auf i=1. nun wird geprüft, ob die zahl, die du eingegeben hast, mit array[0] (welches du nicht gesetzt hast) übereinstimmt. das ist nicht der fall (else), also setzt du array[1]=zahl.
    nun springt die äußere schleife auf i=2. jetzt wird die zahl wieder mit array[0] verglichen (was immernoch nciht gesetzt ist) und nun mit array[1], welches gesetzt ist und nun merkt er, dass die zahl doppelt ist.

    Die zuweisung im if-fall ist immernoch falsch. auch hier vergleichst du die zahl, ohne eine variable zu setzen.
    außerdem wird die "korrigierte" zahl immernoch nicht mit den bereits im array stehenden zahlen verglichen. wenn du also bekommst: 1 gibts schon im array, kannste nochmal 1 eingeben und du hast zwei mal die 1 im array (angenommen deine zuweisung der ersten zahl wäre an der richtigen stelle und die zuweisung im if-fall wäre richtig.)
     
  14. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Oo was los?. Ich blick gerade garnichtmehr durch. Den ersten Teil hab ich verstanden. Aber danach weiß ich nicht genau was du meinst. Was ist mit der if anweisung?
     
  15. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Also du hast immernoch
    Code:
    if(z == schein.zahl[j]){
    
    printf("Zahl schon vorhanden. Bitte neu eingeben:\n");
    printf("%i Zahl", i+1);
    scanf("%i", &z);
    z == schein.zahl[i];
    im quelltext stehen. die letzte zeile ist falsch. habe ich oben schon erklärt, du hast es bloß nur an einer stelle geändert nicht in beiden.

    desweiteren hast du
    Code:
    }else{
    
    schein.zahl[i] = z;
    
    }
    diese zuweisung im else-fall. diese muss aber auf jeden fall NACH der inneren for-schleife passieren, nicht in ihr in diesem else fall.

    und wenn du diese zuweisung außerhalb der inneren schleife ziehst kannst du dir im oberen schnipsel auch die letzte Zeile ganz sparen.

    behebe erstmal das problem und schau, obs soweit läuft, wie du es dir vorstellst.

    Danach kannst du mal folgendes eingeben: 1. Zahl = 1; 2. Zahl = 1; 2. Zahl Korrektur = 1. Die Korrektur wird er annehmen, obwohl es immernoch die 1 ist, die er ja schonmal im array stehen hat.

    Edit: @Anqueetus Danke. Manchmal erklär ich Sachen vllt zu kompliziert
     
  16. 5. Januar 2011
    AW: zahl mit Zahl im Array vergleichen

    Code:
    z == schein.zahl[i];
    
    macht immer noch keinen Sinn.
    Code:
    schein.zahl[i] = z;
    
    ist es auch dort.

    Das andere Problem was er anspricht ist, dass du trotzdem sieben mal die 1 eingeben kannst.

    Wenn du die 1 eingibst schreibt er es an position 0.
    Dann gibst du nochmal die 1 ein und er sagt sorry, geht nicht.
    Dann gibst du nochmal die 1 ein und er überprüft gar nicht mehr und schreibts einfach in position 1.

    Daher musst du die Abfrage am besten in ne Schleife packen die solange läuft, bis eine Zahl eingegeben wurde die nicht im Array ist
     
  17. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.