- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Vektoren zusammenfügen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    jetzt frag ich mal ganz blöd was machst sprintf()?

    edit:
    ich würd sowas machen aber ich weiß ja net genau was du machen willst

    Code:
    #define MAX 12
    
    typedef enum { eJan = 1, eFeb, eMar, eApr, eMai, eJun, eJul, eAug, eSep, eOkt, eNov, eDez} month_t
    
    typdef struct{
       uint8_t hours;
       uint8_t minutes;
       uint8_t seconds;
       uint8_t day;
       month_t month;
       uint16_t year;
    } dates_t
    
    dates_t datesString[MAX]
    
    void InitDateString(dates_t *buf) // 14:33:59 - 24.01.2007
    {
       buf->hours = 14;
       buf->minutes = 33;
       buf->secondes = 59;
       buf->day = 24;
       buf->month = eJan;
       buf->year = 2007;
    }
    ps: keine gewähr auf richtigkeit hab das grad so ausm ärmel geschüttelt

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Nein das geht nicht.

    datesString[] ist kein String, sondern ein Array von dates_t.

    sprintf schreibt die Ausgabe nicht in ein FILE* wie fprintf oder stdout wie printf, sondern in einen String, bzw. es bekommt einen char*, also die Adresse des Anfangs.
    Disclaimer: none. Sue me.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.01.2005
    Alter
    41
    Beiträge
    76
    Danke Sprinter, mit sprintf funktioniert es gut. es gibt nur eine ewig lange codezeile

    eine andere Frage zu sprintf:
    ich weis man muss irgendwo ein "0" einfügen wenn mann möchte, dass "01" ausgegeben wird anstelle von "1".
    Wo muss ich das "0" einfügen? irgendwo um das "%" herum aber wo?

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    %5.2f = 00123.45

    du brauchst wahrscheinlich %2d

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Führende 0 mit %02d oder %2d. Wenn die Codezeile zu lange ist, kannst die auch umbrechen.

    Code:
    sprintf (buf, "%d:%d:%d %d-%d-20%d %d %c%c" CR_LF,
                          hour, min, sec,                // Zeit
                          day, month, year,              // Datum 
                          t5, t5_string[0], t5_string[2] // Zeugs 
            );
    Disclaimer: none. Sue me.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    12.01.2007
    Beiträge
    93
    musst du nicht beiner unterbrechung der zeile einen '\' backslash machen?

    Code:
    sprintf (buf, "%d:%d:%d %d-%d-20%d %d %c%c" CR_LF, \
                          hour, min, sec, \               // Zeit
                          day, month, year, \             // Datum
                          t5, t5_string[0], t5_string[2] \ // Zeugs
            );

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Nein. \ brauch der Präprozessor bei mehrzeiligen Makros.
    Für den Compiler sind SPACE, TAB, NEWLINE, ... white space.
    Disclaimer: none. Sue me.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    09.01.2005
    Alter
    41
    Beiträge
    76
    so ich hab das mal ausprobiert und was in meinem txt file steht ist folgendes:

    15:70:79,25.15.20124, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?

    Wieso das Jahr falsch ist ist ein anderes Problem -> Kleinigkeit.

    Aber wieso bekomme ich "?" ?

    Mein Code:
    Code:
    	sprintf(buf,"%2d:%2d:%2d,%2d.%2d.20%2d,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f%c%c",timeStamp.hour,timeStamp.min,timeStamp.sec,timeStamp.day,timeStamp.month,timeStamp.year,tempT5,tempT6,tempT8,tempT9,tempT10,tempT11,tempT12,tempT13,tempT15,tempT16,tempB,tempR,tempOut,tempSouth,tempWest,tempRunBackT40,0x0D,0x0A);
    alle Temperaturen sind double Werte die möchte ich auf Hundertstel genau abspeichern.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    sprintf aud der avr-libc unterstützt nicht den vollen Funktionsumfang. %f würde float-Arithmetik und malloc und... nach sich ziehen.

    Schau mal in die Doku zur avr-libc. bei WinAVR unter ./doc/...
    Disclaimer: none. Sue me.

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests