INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
sprintf() plus scanf() : ständig Fehler, warum?
26.02.2015, 09:49 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2015 09:59 von HaWe.)
Beitrag #1
sprintf() plus scanf() : ständig Fehler, warum?
hallo,
ich kriegs nicht hin mit sprintf() plus scanf() : ständig Fehler, warum?
edit, nochmal verschärft debugged:
das Lesen des Originalstrings ist schon die erste Fehlerquelle:

Code:
void setup() {
  // put your setup code here, to run once:
  
  Serial.begin(9600);
  
  int16_t p=33, q=66, m, n;
  
  float x=PI, y=987.654, v, w;
  char sdata[64], sbuf[64];
  
  
  Serial.println("Original-Werte");
  Serial.println(p);
  Serial.println(q);
  Serial.println(x);
  Serial.println(y);
  
  Serial.println("Original-String per sprintf()");
  sprintf(sdata,"%08d%08d%08.3f%08.3f", p, q, x, y);
  Serial.println(sdata);  // Originalstring ausgeben
  
  
  scanf (sdata,"%08d%08d%08.3f%08.3f", &m, &n, &v, &w);
  Serial.println("Kopie-Werte per scanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);
  


  strcpy(sbuf, sdata);
  Serial.println("Kopie-String");
  Serial.println(sbuf); // kopierten String ausgeben
  
  
  scanf (sbuf,"%08d%08d%08.3f%08.3f", &m, &n, &v, &w);
  Serial.println("Kopie-Werte per scanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);
  

}

void loop() {
  // put your main code here, to run repeatedly:

}


Ausgabe:
Code:
Original-Werte
33
66
3.14
987.65
Original-String per sprintf()
00000033000000660003.1420987.654
Kopie-Werte per scanf()
28149
13909
0.00
36.63
Kopie-String
00000033000000660003.1420987.654
Kopie-Werte per scanf()
28149
13909
0.00
36.63

wo ist der verf**** Fehler ?? Huh
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 09:57
Beitrag #2
RE: sprintf() plus scanf() : ständig Fehler, warum?
Hi,
ich vermute mal, dass Deine beiden scanf-Aufrufe gar nichts tun. Ohne ein bisschen Whitespace zwischen den Zahlen geht das wahrscheinlich nicht. Nach dem ersten Aufruf haben halt p,q,x und y noch die Werte wie vorher. Die komischen Werte in m,n,v und w lassen sich dadurch erklären, dass Du sie nicht initialisierst.
Werte bei scanf mal den Rückgabewert aus. Der sagt Dir, wie viele Zahlen tatsächlich gefunden wurden.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 10:05
Beitrag #3
RE: sprintf() plus scanf() : ständig Fehler, warum?
ja, stimmt:
Code:
Anzahl Werte per scanf()=-1

jetzt aber mit white spaces als Trenner - das gleiche:

Code:
void setup() {
  // put your setup code here, to run once:
  
  Serial.begin(9600);
  
  int16_t p=33, q=66, m, n, cnt;
  
  float x=PI, y=987.654, v, w;
  char sdata[64], sbuf[64];
  
  
  Serial.println("Original-Werte");
  Serial.println(p);
  Serial.println(q);
  Serial.println(x);
  Serial.println(y);
  
  Serial.println("Original-String per sprintf()");
  sprintf(sdata,"%08d %08d %08.3f %08.3f", p, q, x, y);
  Serial.println(sdata);  // Originalstring ausgeben
  
  
  cnt = scanf (sdata,"%08d %08d %08.3f %08.3f", &m, &n, &v, &w);
  Serial.print("Anzahl Werte per scanf()="); Serial.println(cnt);
  Serial.println("Kopie-Werte per scanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);
  


  strcpy(sbuf, sdata);
  Serial.println("Kopie-String");
  Serial.println(sbuf); // kopierten String ausgeben
  
  
  scanf (sbuf,"%08d %08d %08.3f %08.3f", &m, &n, &v, &w);
  Serial.println("Kopie-Werte per scanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);
  

}

void loop() {
  // put your main code here, to run repeatedly:

}


Ausgabe:
Code:
Original-Werte
33
66
3.14
987.65
Original-String per sprintf()
00000033 00000066 0003.142 0987.654
Anzahl Werte per scanf()=-1
Kopie-Werte per scanf()
28085
13909
0.00
36.13
Kopie-String
00000033 00000066 0003.142 0987.654
Kopie-Werte per scanf()
28085
13909
0.00
36.13
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 10:10
Beitrag #4
RE: sprintf() plus scanf() : ständig Fehler, warum?
Hi,
ach ja. scanf versucht von stdin zu lesen. Da kommt natürlich nix. Ich denke mal, dass Du sscanf brauchst.
Schau Dir vielleicht ab und zu auch mal die Doku zu den Funktionen an.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 10:16 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2015 11:42 von HaWe.)
Beitrag #5
RE: sprintf() plus sscanf() : ständig Fehler, warum?
sscanf, klar Confused

jetzt ist es besser, aber noch nicht gut: er liest 1 Wert zu wenig:

Code:
void setup() {
  // put your setup code here, to run once:
  
  Serial.begin(9600);
  
  int16_t p=33, q=66, m, n, cnt;
  
  float x=PI, y=987.654, v, w;
  char sdata[64], sbuf[64];
  
  
  Serial.println("Original-Werte");
  Serial.println(p);
  Serial.println(q);
  Serial.println(x);
  Serial.println(y);
  
  Serial.println("Original-String per sprintf()");
  sprintf(sdata,"%08d %08d %08.3f %08.3f", p, q, x, y);
  Serial.println(sdata);  // Originalstring ausgeben  
  
  cnt = sscanf (sdata,"%08d %08d %08.3f %08.3f", &m, &n, &v, &w);
  Serial.print("Anzahl Werte per sscanf()="); Serial.println(cnt);
  Serial.println("Kopie-Werte per sscanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);  

  strcpy(sbuf, sdata);
  Serial.println("Kopie-String");
  Serial.println(sbuf); // kopierten String ausgeben
    
  sscanf (sbuf,"%08d %08d %08.3f %08.3f", &m, &n, &v, &w);
  Serial.println("Kopie-Werte per sscanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);

}

void loop() {

}

Code:
Original-Werte
33
66
3.14
987.65
Original-String per sprintf()
00000033 00000066 0003.142 0987.654
Anzahl Werte per sscanf()=3
Kopie-Werte per sscanf()
33
66
0.00
36.13
Kopie-String
00000033 00000066 0003.142 0987.654
Kopie-Werte per sscanf()
33
66
0.00
36.13
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 10:42
Beitrag #6
RE: sprintf() plus scanf() : ständig Fehler, warum?
Tja, da weiß ich jetzt auch nicht. Hast Du mal sscanf einfach nur mit einem Float-Wert probiert?

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 11:28 (Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2015 11:43 von HaWe.)
Beitrag #7
RE: sprintf() plus sscanf() : ständig Fehler, warum?
(noch mal überprüft - wieder Quatsch!
Der liest tatsächlich keine Float-Werte per sscanf!
Was ein Mist !! Angry Angry Angry

Code:
// sprintf() plus sscanf()
// Sketch 1.6.0

void setup() {
  //  
  Serial.begin(9600);
  
  int16_t p=33, q=66, m, n, cnt;
  
  float x=PI, y=987.654, v, w;
  char sdata[64], sbuf[64];
  
  // pre-test
  Serial.println("Start pre-Test");
  Serial.println("Original x als float");
  Serial.println(x);
  Serial.println("Original-String: 1x float formatiert per sprintf()");
  sprintf(sdata,"%08.3f",x);
  Serial.println(sdata);
  
  cnt = sscanf (sdata,"%08.3f", &w);
  Serial.print("Anzahl Werte per sscanf()="); Serial.println(cnt);
  Serial.println("Kopie-Werte per sscanf()");
  Serial.println(w);
  Serial.println("Ende pre-Test");
  Serial.println();
  
  
  
  Serial.println("Original-Werte");
  Serial.println(p);
  Serial.println(q);
  Serial.println(x);
  Serial.println(y);
  
  Serial.println("Original-String per sprintf()");
  sprintf(sdata,"%08d %08d %08.3f %08.3f", p, q, x, y);
  Serial.println(sdata);  // Originalstring ausgeben
  
  
  cnt = sscanf (sdata,"%08d %08d %08.3f %08.3f", &m, &n, &v, &w);
  Serial.print("Anzahl Werte per sscanf()="); Serial.println(cnt);
  Serial.println("Kopie-Werte per sscanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);
  


  strcpy(sbuf, sdata);
  Serial.println("Kopie-String");
  Serial.println(sbuf); // kopierten String ausgeben
  
  
  sscanf (sbuf,"%08d %08d %08.3f %08.3f", &m, &n, &v, &w);
  Serial.println("Kopie-Werte per sscanf()");
  Serial.println(m);
  Serial.println(n);
  Serial.println(v);
  Serial.println(w);
  

}

void loop() {
  // put your main code here, to run repeatedly:

}


Code:
Start pre-Test
Original x als float
3.14
Original-String: 1x float formatiert per sprintf()
0003.142
Anzahl Werte per sscanf()=1
Kopie-Werte per sscanf()
0.00
Ende pre-Test

Original-Werte
33
66
3.14
987.65
Original-String per sprintf()
00000033 00000066 0003.142 0987.654
Anzahl Werte per sscanf()=3
Kopie-Werte per sscanf()
33
66
0.00
0.00
Kopie-String
00000033 00000066 0003.142 0987.654
Kopie-Werte per sscanf()
33
66
0.00
0.00
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.02.2015, 14:54
Beitrag #8
RE: sprintf() plus scanf() : ständig Fehler, warum?
Ah ja: https://github.com/arduino/Arduino/issues/1719
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Nachtwächter - Fehler im Sketch juergen001 15 847 24.04.2018 06:54
Letzter Beitrag: juergen001
  Rundklammern setzen, aber wie und warum? HarryS 4 556 18.03.2018 10:25
Letzter Beitrag: HarryS
  Hilfe bei diesen Fehler MrMagoo 22 1.055 06.02.2018 20:03
Letzter Beitrag: hotsystems
  <RCReceive.h> Fehler do1xxy 7 505 13.01.2018 13:21
Letzter Beitrag: do1xxy
  Arduino zu MySQL via Wifi Fehler beim compilieren Franzel007 21 1.158 05.01.2018 20:24
Letzter Beitrag: Tommy56
  Neuling Fehler beim Kompilieren guenni71 6 918 26.11.2017 16:48
Letzter Beitrag: hotsystems
  M enue System zeigt Fehler rev.antun 11 1.008 23.11.2017 12:22
Letzter Beitrag: rev.antun
  Fehler in gleitkomma Berechnung BennIY 5 564 04.11.2017 19:10
Letzter Beitrag: Tommy56
  Suche Hilfe für den Fehler in der Datei Holzwurm56 5 614 01.11.2017 14:26
Letzter Beitrag: Holzwurm56
  Compiler Fehler Harti 8 1.056 16.06.2017 17:51
Letzter Beitrag: Harti

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste