Einbindung von itoa



  • Wäre das nicht einfacher?

    char zahl[100];
    int x=923;
    sprintf(zahl, "%d", x);
    


  • ja wie genau mach ich das wieder....

    void itoa(int n, char s[]);
    
    int main(int argc, char* argv[])
    {
      char Eingabe[MAX];
      int x;
      for(x=0; x <= (MAX-1); x++)
          Eingabe[x] = ' ';
      gets(Eingabe);
      itoa(Eingabe);
    
            return 0;
    }
    

    Wenn ich des so eingebe, bekomme ich Parameterfehler. Wie kann ich diese umgehen ?!?

    @ supertux:
    Es soll in diesem Falle eine rekursive Funktion bestehen bleiben !



  • Schau dir nochmal ganz genau an, wieviele Parameter itoa braucht und wieviele du angibst. Wenn du dann noch passende Typen nimmst, bist du fast da.



  • Ähm, guck dir doch mal den Aufruf an ...



  • void itoa(int n, char s[]);
    
    int main(int argc, char* argv[])
    {
      char Eingabe[MAX];
      int x, y, s;
      for(x=0; x <= (MAX-1); x++)
          Eingabe[x] = ' ';
      gets(Eingabe);
      for(x=0;x<=(MAX-1);x++)
        {
          Eingabe[x] = itoa(Eingabe[x]);
        }
    
            return 0;
    }
    

    Ich hab erstmal den Code soweit verändert, dass es so aussieht. Die Aussgabe der Zeichen ist somit besser, aber ich weiß einfach nicht was ich da nehmen soll als zusätzlichen Wert für itoa, damit der Parameterfehler nicht mehr kommt !!! 😕



  • itoa will 2 Parameter, du übergibst immer noch nur einen. Die erste Version war übrigens besser. Vergiss diese Schleife.



  • Dann kehr ich erstmal zur ersten Version zurück.....

    void itoa(int n, char s[]); 
    
    int main(int argc, char* argv[]) 
    { 
      char Eingabe[MAX];
      int x;
      for(x=0; x <= (MAX-1); x++) 
          Eingabe[x] = ' '; 
      gets(Eingabe); 
      itoa(x, Eingabe);
    
            return 0;
    

    So hab ich es einfach mal jetzt gemacht. Ich kann jetzt Zeichen eingeben, aber bekomme keine Ausgabe. Daran muss ich noch etwas werkeln ! 💡



  • So die Ausgabe ist fertig, nachdem ich diese auch bei einem anderen Programm mit rekursiver Funktion getestet habe:

    int main(int argc, char* argv[]) 
    { 
      char Eingabe[MAX];
      int x;
      for(x=0; x <= (MAX-1); x++) 
          Eingabe[x] = ' '; 
      gets(Eingabe); 
      itoa(x, Eingabe);
      for(x = 0; x <= (MAX-1); x++)
      {
        printf("%d\n",Eingabe[x]);
      }
    
            return 0; 
    }
    

    Nun bekomme ich auch meine Ausgabewerte, die ich aber noch nicht so ganz deuten kann, denn es ist eine riesengroße Zahl.
    Testet vielleicht mal das Programm bei euch. Ich poste nun nochmal alles:

    #include <stdio.h>
    
    #define MAX 100
    
    void itoa(int n, char s[]); 
    
    int main(int argc, char* argv[]) 
    { 
      char Eingabe[MAX];
      int x;
      for(x=0; x <= (MAX-1); x++) 
          Eingabe[x] = ' '; 
      gets(Eingabe); 
      itoa(x, Eingabe);
      for(x = 0; x <= (MAX-1); x++)
      {
        printf("%d\n",Eingabe[x]);
      }
    
            return 0; 
    }
    
    /* itoa() erhält zwei Argumente: eine ganze Zahl n und einen Zeichenvektor s[].
    Wenn das Ergebnis der ganzzahlugen Division n/10 nicht Null ist, ruft sich itoa
    selbst mit n/10 auf: if (n / 10)
                            itoa(n / 10, s);
    Wenn n/10 in einem der rekursiven Aufrufe Null ist, betrachten wir die signifikanteste
     (äußerste linke) Ziffer in n. Wir benutzen eine static-Variable i als Index für den
     Vektor s[]. Wenn n negativ ist, setzen wir ein Minuszeichen in die erste Position des
     Vektors s[] und inkrementieren i. Wenn itoa() von den rekursiven Aufrufen zurückkehrt,
     werden die Ziffern von links nach rechts berechnet. Jeder Aufruf fügt '\0' hinzu, um die
     Zeichenkette zu beenden, und dass '\0' immer wieder überschrieben wird, nur im äußersten
     Aufruf nicht.  */
    void itoa(int n, char s[])
    {
      static int i;
      if (n / 10)
        itoa(n / 10, s);
      else
      {
        i = 0;
        if (n < 0)
          s[i++] = '-';
       }
       s[i++] = (n) % 10 + '0';
       s[i] = '\0';
    }
    


  • Jetzt mal was grundsätzliches: Du willst eine Funktion benutzen, die einen int in einen String konvertiert, oder?

    Also solltest du einen int einlesen und einen String ausgeben.



  • ja da haste Recht.... hmmm.... mom !

    Also müsste ich was am Print-Befehl verändern oder ? 😕 *unsicher ist*



  • Ich kann's nicht mehr mit ansehen...

    int eingabe;
    char ausgabe[20];
    
    scanf("%d", &eingabe);
    
    itoa(eingabe, ausgabe);
    
    printf("%s", ausgabe);
    


  • In der Mittagspause hatte ich auch eine Idee, die deiner nahe kommt, aber ich danke dir auch ! 👍 👍


Anmelden zum Antworten