-
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 :D hab das grad so ausm ärmel geschüttelt
-
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.
-
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?
-
%5.2f = 00123.45
du brauchst wahrscheinlich %2d
-
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
);
-
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
);
-
Nein. \ brauch der Präprozessor bei mehrzeiligen Makros.
Für den Compiler sind SPACE, TAB, NEWLINE, ... white space.
-
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.
-
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/...