bprintf



  • Hallo,
    ich soll eine Funktion bprintf schreiben die alles können soll wie printf und extra dazu mit %b die zahl binär ausgeben.
    Meine Idee ist es einfach den formatierungstring nach %b abzusuchen, die binärzahl auszurechnen, die in formatierungstring eintragen und dann alles an printf zu übergeben.
    Nur leider schaffe ich es überhaupt noch nicht mal alles direkt an printf fehlerfrei zu übergeben, schon ohne in binär umrechnen/raussuchen/austauschen von %b.

    Habt ihr iwelche Tipps womit ich das Regeln könnt?



  • Zeig doch mal, wie du es bisher versuchst. Dann kann man auch schneller helfen.



  • Hab grad mal alles übern Haufen geworfen und versuch einfach nur blöd die auzugeben. Iwie stehe ich aufn Schlauch.

    bprintf(char *ausgabe,...)
    {
       va_list ap;
       int zaehler=0;
       va_start(ap,*ausgabe);     //liest erstes Argument
       printf("%d\n",ap);
       for(int u=0;u<50;u++)
       {
       va_arg(ap,int);        //liest nächstes Argument
       printf("%d\n",ap);
       }
    
            /* int zahl=10,zaehler=0,i=0;
             int b[16]={0};
    
             for(i=(sizeof(zahl) * 8) - 1; i >= 0;i--)
             {
                b[zaehler]= (zahl & (0x01 << i)) > 0;
                zaehler++;
             }
             */
    
       va_end(ap);
    }
    
    main()
    {
    bprintf("Hallo Wie geht es dir? %d %h %b",10,10,10);
    getch();
    
    }
    


  • gott, son dummer fehler, is mir bissle peinlich, muss türlich das zeichen erstma ner variable zuweisen XD

    Leider funkt es aber so auch noch net.
    Er gibt nicht 0 bis 10 aus sondern random große zahlen.

    Okay, der Pointer hat mir das Genick gebrochen. Jetzt funkt es.

    #include <stdio.h>
    #include <stdarg.h>
    #include <string.h>
    #include <conio.h>
    
    bprintf(char *ausgabe,...)
    {
       va_list ap;
       int array[100]={0};
       int i=0;
       va_start(ap,ausgabe);     //liest erstes Argument
       do
       {
       array[i]=va_arg(ap,int);        //liest nächstes Argument
       printf("%d\n",array[i]);
       i++;
       }
       while(array[i-1] != -1);
    
            /* int zahl=10,zaehler=0,i=0;
             int b[16]={0};
    
             for(i=(sizeof(zahl) * 8) - 1; i >= 0;i--)
             {
                b[zaehler]= (zahl & (0x01 << i)) > 0;
                zaehler++;
             }
             */
    
       va_end(ap);
    }
    
    main()
    {
    bprintf("Hallo Wie geht es dir?",1,2,3,4,5,6,7,8,9,10,-1);
    getch();
    
    }
    


  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C (C89 und C99) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • int i=0;
       ...
       while(array[i-1] != -1)
    

    Fällt dir da was auf?



  • ja, das war mir vorn schon aufgefallen,hab daraus ne do while gemacht.
    Das schlimme war aber das ich bei

    va_start(ap,*ausgabe);
    

    *ausgabe hatte anstatt nur ausgabe.

    Edit: Kann man eigentlich abfragen wieviel Parameter übergeben werden? Ich hab ja jetzt erstma sobald -1 kommt, das die Parameter ende sind. Aber in printf muss man sowas ja nicht angeben.



  • Mogimogwai schrieb:

    Edit: Kann man eigentlich abfragen wieviel Parameter übergeben werden? Ich hab ja jetzt erstma sobald -1 kommt, das die Parameter ende sind. Aber in printf muss man sowas ja nicht angeben.

    In C nicht.
    printf erkennt das an der Anzahl der Formatspecifier.



  • Gut, dann zähle ich einfach wie oft %b,%d usw. vorkommt und nimm die zahl als max. Wert. Vielen Dank soweit ersmta.



  • Aber aufpassen: Es gibt innerhalb der Formatspecifier noch den *.
    Damit kannst du dei Feldlänge noch als Parameter mit übergeben.
    Also statt

    printf("%8d", 4711);
    

    dann

    printf("%*d", 8, 4711);
    

    Genaueres unter http://www.cplusplus.com/reference/clibrary/cstdio/printf/



  • uh, das ist ja noch gemein.
    Werd ich nach mein jetzigen Problem gleich mal probieren ob ich das beachtet bekomme.
    Aber immo hänge ich daran das ich mein array nicht ins printf("array",wert1,wert2)
    übergeben bekomme.
    Weil wenn ich es ohne " " übergeb meldet er logischerweise syntax fehler, aber mit z.b "%c",array[index] verarbeitet er ja die %c usw. im array nicht mehr.

    Ist das überhaupt möglich?



  • Mogimogwai schrieb:

    uh, das ist ja noch gemein.
    Werd ich nach mein jetzigen Problem gleich mal probieren ob ich das beachtet bekomme.
    Aber immo hänge ich daran das ich mein array nicht ins printf("array",wert1,wert2)
    übergeben bekomme.
    Weil wenn ich es ohne " " übergeb meldet er logischerweise syntax fehler, aber mit z.b "%c",array[index] verarbeitet er ja die %c usw. im array nicht mehr.

    Ist das überhaupt möglich?

    😕 😕 😕



  • Versuch ich mal als Beispiel es zu erklären:
    Die Funktion rufe ich so z.b auf:

    bprintf("%d ist in Binär %b!\n",a,a);
    

    die Funktion bprintf macht daraus:

    printf("%d ist in Binär 0111!\n",a);
    

    und printf macht dann halt seine Aufgabe und gibt in der Konsole aus:

    7 ist in Binär 0111!
    *CursorHier*

    printf("part1",part2)
    

    Zusammengefasst muss ich ja part1 und part 2 printf übergeben. Ist dies überhaupt möglich?



  • auf die einfachste Lösung komm ich türlich net.
    Ich kann es einfach so übergeben

    printf(array,werte);
    

Anmelden zum Antworten