Anfänger braucht Hilfe bei seinem Programm



  • @ matic: Keine Crossposts bitte

    @ all: In Zukunft bitte die [cpp]-Tags verwenden, dann ist der Code auch lesbar 😉



  • In etwa so:

    char * invert_char(char * bla)
    {
       int i,j;
       char *array;
       for(i = 0; bla[i] !='\0';i++);
       array = malloc(sizeof(char) *i+1);
    
       for (j = i ; j >=0; j--)
       {
         array[i-j] = bla[j];
       }
    
       array[i+1] = '\0';
       return array;  
    }
    

    somit kannst du die Reihenfolge deines Arrays ändern!!!!!!



  • dat komplette program muss man umkremplen:
    1. warum übergibtst du der funktion bin2int die zahl in binär und in int-form? wenn die beiden nun nicht dieselbe zahl sind??
    2. die funktion muss vorher deklariert werden.
    3. der modulooperator gibt dir direkt den rest an also lass die schleife wech denn
    4. das mit der binärdarstellung macht man anders:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char* int2bin(int ivar)
    {
        char* bin=0;
        bool write=false;
        bin=(char*)malloc(sizeof(char)*33);
        bin[0]=0;//damit man nachher alles per strncat anhängen kann.
    
              for(int i=(sizeof(int)*8)-1;i>=0;i--)
              {
                      if (ivar&1<<i) {write=true;strncat(bin,"1",1);}
                      else
                          if (true==write) strncat(bin,"0",1);
              };
              if (0==ivar) strncat(bin,"0",1);
              return bin;          
    };
    
    int main()
    {
        char* bin=0;
        int ivar=0;//kannst natürlich auch einlesen
        for (int i=0;i<3;i++)
        {
            ivar+=33*(i+1);
            bin=int2bin(ivar);
            printf("Binaerwert: %s\n",bin);
            printf("Dezimalwert: %d\n\n",ivar);
            free(bin);
        };    
        system("pause");    
    };
    

    muss noch schnell wech aber ich werds dir nachher n bisschen ausführen 😉



  • tja, ich habs so gemacht und es funktioniert, ihr besserwisser 😛



  • bill bones schrieb:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    // #include <stdbool.h> vergessen
    
    char* int2bin(int ivar)
    {
        char* bin=0; // NULL
        bool write=false;
        bin=(char*)malloc(sizeof(char)*33);
        /* - malloc wird nicht gecastet
           - sizeof(char) ist immer 1
           - Besser als 33 ist sizeof(int)*CHAR_BIT+1 (#include <limits.h>)
        */
        bin[0]=0;//damit man nachher alles per strncat anhängen kann. // strncat() ist hier mehr als nur übertrieben
                         
              for(int i=(sizeof(int)*8)-1;i>=0;i--) // siehe oben, CHAR_BIT
              {
                      // unnötig umständlich geschrieben, total inkonsistente Einrückung        // unnötige boolsche Variable
                      if (ivar&1<<i) {write=true;strncat(bin,"1",1);}
                      else
                          if (true==write) strncat(bin,"0",1);
              };
              if (0==ivar) strncat(bin,"0",1);
              return bin;          
    };
    


  • manmal hat man ja 'itoa'
    oder das: http://www.jbox.dk/sanos/source/lib/xtoa.c.html



  • @ tactX: ich verwende die Dev C/C++ IDE deshalb (wobei ich nichtmal weiss mit ob der code mit nem C oder C++ compiler compiliert wird, aber der cast z.b. ist dort notwendig) deshalb kein stdbool.h und "0" statt "NULL". "sizeof(char)" war übrigens nur zur besseren verständlichkeit. hab nich mit soviel krititk grechnet ;), einzig beim letzten kommentar muss ich dir zustimmen: hab den code z.t. aus nem C++ code und hab ihn auf die schnelle noch etwas umgeschrieben/teile kopiert usw. naja gut strncat ist hier möglicherweise etwas zu viel des guten 😃 wollts ihm halt verständlich machen.

    @ matic: ich weiss jetzt nich ob dir dinge wie malloc(), zeiger oder bitoperationen bekannt sind. wenn du damit jetzt nix anfangen kannst, kannst du dich ja nochmal melden.



  • bill bones schrieb:

    hab nich mit soviel krititk grechnet 😉

    War nicht böse gemeint. Aber wenn du mit so ultimativen Sätzen wie

    das mit der binärdarstellung macht man anders

    kommst, erwarte ich zumindest kein strncat 😉

    PS: Und hör auf C mit C++ zu compilieren. C Code -> C Compiler.



  • Sorry hab ich vergessen zu erwähnen.
    Die "strlen", "strcpy" Funktionen dürfen nicht verwendet werden.



  • Diese Funktionen kannst du dir auch selber schreiben, wenn du die vorgefertigten Funktionen nicht verwenden darfst. (die C-Stringverarbeitung basiert darauf, daß ein "String" von der Endemarke '\0' abgeschlossen wird)

    int my_strlen(char* str)
    {
      int len=0;
      while(str[len]!='\0') ++len;
      return len;
    }
    
    void my_strcpy(char* tgt,const char* src)
    {
      while(*src!='\0')
      {
        *tgt=*src;
        ++tgt;++src;
      }
    }
    


  • int my_strlen(char *s)
    {
        char *p = s;
        while (*p) p++;
        return p-s;
    }
    
    void my_strcpy(char *to, const char *from)
    {
        while (*to++ = *from++);
    }
    

Anmelden zum Antworten