Hallo da draussen, ich habe ein Programm, das sich verrechnet. Ich will aus 5 ASII-Zeichen (Ziffern) eine int machen. Bei den lower 4 digts klappt es, aber bei dem 10.000er digit kommt es zu einem Rechenfehler. Hier die wesentlichen Programmzeilen: uint8_t x ; // hier definiere ich ein ASCII - Zeichen // jetzt wandle ich das ASCII-Zeichen in eine int // und weil's die 5te Stelle der gesamten int ist, *10000 // und ausgeben... // der gcc gibt eine Warnung: "int Format. anderer // Typ Argument (Argument 2) printf ( "x = %i \r\n ", ( ( x - 48 ) * 10000 ) ) ; // das Ergebnis: ab x > 3 (genau ab 32.768, was ja 2^15 // ist) kommen falsche Ergebnisse der Berechnung. Was mache ich falsch ? Vielen Dank für Eure Mühe Otto
> Was mache ich falsch ?
Du hast keine Doku gelesen sondern einfach was angenommen.
%i ist fuer 'vorzeichenbehaftete' Zahlen.
%u ist fuer 'unsigned'
Hi Peter, ..hab ich natürlich probiert, macht aber die gleichen Fehler. Trotzdem danke für Deine schnelle Antwort Otto
Hallo Karl Heinz ...ich hab' %u probiert, ich habe auch versucht mit x als unint32_t. Es kommt immer die gleiche Compiler-Warnung und der gleiche Rechenfehler. Ich habe auch eine long int als Variable eingeführt und diese ausgegeben, ergab immer den gleichen Fehler. Ich weiß nicht, ob der Fehler durch die Berechnung entsteht, oder durch die Ausgabe. Trotzdem Danke für Deinen Hinweis, Otto
1 | #include <stdio.h> |
2 | |
3 | int main() |
4 | {
|
5 | char buf[256]; |
6 | |
7 | uint8_t x; // hier definiere ich ein ASCII - Zeichen |
8 | // jetzt wandle ich das ASCII-Zeichen in eine int
|
9 | // und weil's die 5te Stelle der gesamten int ist, *10000
|
10 | // und ausgeben...
|
11 | // der gcc gibt eine Warnung: "int Format. anderer
|
12 | // Typ Argument (Argument 2)
|
13 | x = '0' + 4; |
14 | sprintf ( buf, "x = %u", ( ( x - 48 ) * 10000 ) ) ; |
15 | // das Ergebnis: ab x > 3 (genau ab 32.768, was ja 2^15
|
16 | // ist) kommen falsche Ergebnisse der Berechnung.
|
17 | }
|
funktioniert so wie es sollte. %u im Gegensatz zu %i
Hab's schon gesehen, du hast die Warnung im Pgm als Kommentar reingeschreieben. Poste doch mal Deinen richtigen, kompletten Code. Nicht nur einen Ausschnitt.
An Alle, ...hat sich erledigt. Muss natürlich %u sein anstelle %i ! Ich hatte die Änderungen an der falsche Stelle ausprobiert, sorry, jetzt rechnet der uC richtig. Danke für Eure Bemühungen ! Otto
Es tut keinem weh, die Warnung exakt und in vollem Wortlaut per copy+paste reinzustellen, hilft aber ungemein. Und dann auch sämtliche Quelltextzeilen bis zu dieser Warnung (als Anhang). Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.