Hilfe bei verschiedenen Problemen



  • Hallo Leute,
    ich sitze vor ner aufgabe und dabei sind verschiedene Problemchen angefallen. Da ich noch recht neu beim Programmieren bin, bräuchte ich mal Hilfe. Btw. ich programmmiere in C.

    Also das erste Problem wird wohl noch recht einfach sein:
    Ich lasse den User eine Zahl eingeben und er soll ne Fehlermeldung bekommen, wenn es eine Kommazahl ist, alle Lösungen die ich bis jetzt gesehen habe, haben mich nicht überzeugt oder haben nicht funktioniert.

    Zweites Problem ist folgendes:
    Die eingebene Zahl soll mit verschiedenen Rechenfunktionen gerechnet werden, je nachdem ob es eine gerade oder ungerade zahl ist und das solange, bis es 1 oder 0 ist. Die Zwischenlösungen sollen in einer Zahlenfolge angelegt werden. Das habe ich so gelöst, dass ich es in ein Array schreibe, aber wie kann ich das Array denn dynamisch machen, dass es auch nur so groß ist, wie ich wirklich Stellen brauche?
    Z.b wenn ich die funktion x/2 habe und für x setze ich 4 ein, dann brauche ich nur 3 Felder im Array, sprich 4, 2, 1. Wenn ich aber 32 einsetze, brauche ich 6 Stellen.

    Letzes Problem:
    Wie gebe ich diese Zahlenfolge dann mit printf() aus?

    Vielen dank für die Antworten.

    bye Jar



    1. man: strtol liefert den gescannten Integerwert als Rückgabe und die letzte Leseposition im zweiten Parameter - wenn an der Stelle etwas anderes als '\0' (Stringende) steht, hat der User was falsches eingegeben.

    2. dynamische Arrays kannst du mit malloc() anlegen und mit realloc() notfalls vergrößern. (aber ich würde mir immer notieren, wie groß das Array gerade ist)

    3. am besten in einer Schleife:

    for(int i=0;i<asize;++i) printf("%d,",array[i]);
    


  • vielen dank erstmal, aber wie ich schon sagte, bin ich neu und ich glaube ich raffe nicht genau, welche agumente ich für strtol, malloc und realloc angeben muss. könntest du mir vielleicht ganze einfache beispiele angeben?

    ach und wenn ich diese zahlenkette dann habe, wie muss ich dass dann in printf() angeben, ich müsste dann ja immer %d machen, aber ich weiß ja nicht, wieviele ich brauche, weil ich ja net weiß wie groß das array dann ist.

    thx



  • strtol:

    long i;char* input, next;
    
    //hole die Usereingabe und speichere sie in input
    i=strtol(input/*zu lesender Text*/,&next/*Folgeposition*/,10/*Basis*/
    
    if(*next!='\0') printf("Fehler - das war keine ganze Zahl\n");
    

    malloc/realloc:

    int size=100;
    int* data=malloc(size*sizeof(int)/*Größe des Bereiches*/);
    
    //Platz reicht nicht mehr:
    size+=50;
    data=realloc(data/*alter Zeiger*/,size*sizeof(int)/*neue Größe*/);
    

    (bei beidem solltest du hinterher überprüfen, ob NULL zurückgegeben wurde)

    ach und wenn ich diese zahlenkette dann habe, wie muss ich dass dann in printf() angeben, ich müsste dann ja immer %d machen, aber ich weiß ja nicht, wieviele ich brauche, weil ich ja net weiß wie groß das array dann ist.

    Du mußt natürlich mitzählen, wieviele Werte du hast - und dann printf() in einer for-Schleife aufrufen.



  • schönen dank


Anmelden zum Antworten